validation - 在 View 中呈现验证错误,避免重复

标签 validation laravel dry laravel-blade laravel-validation

循环遍历验证器中的错误,然后在表单元素之后立即显示它们,而无需求助于大量 @if 子句的最佳方法是什么?

这既不优雅也不干燥:

<input name="name" />
@if (isset($errors['name']))
    <div class="error">{!! $errors['name'] !!}</div>
@endif

<input name="email" />
@if (isset($errors['email']))
    <div class="error">{!! $errors['email'] !!}</div>
@endif

<input name="address" />
@if (isset($errors['address']))
    <div class="error">{!! $errors['address'] !!}</div>
@endif

我想避免这种重复。有没有办法使用 PHP 数组或包来生成表单元素来处理整个过程,并在表单元素后面放置一个错误 div?

最佳答案

我不知道任何包,但我只会创建自己的宏类,类似于 HTML 构建器或表单构建器。

事实上,我可能会扩展 FormBuilder.php 并添加一些额外的方法,例如:

public function inputWithError($type, $name, $errors, $value = null, $options = array())
{
    $errorString = '';
    if(isset($errors[$name])) {
        $errorString = '<div class="error">{$errors[$name]}</div>';
    }
    return $this->input($type, $name, $value, $options) . $errorString;
}

注意 FormBuilder 包可以在 here 找到

编辑

目录可能是:

/App/App/ExtendedInput
 |
 +- ExtendedInput.php
 |
 +- ExtendedInputFacade.php
 |
 +- ExtendedInputServiceProvider.php

扩展输入.php

use Illuminate\Html\FormBuilder;

class ExtendedInput extends FormBuilder 
{

    public function inputWithError($type, $name, $errors, $value = null, $options = array())
    {
        $errorString = '';
        if(isset($errors[$name])) {
            $errorString = '<div class="error">{$errors[$name]}</div>';
        }
        return $this->input($type, $name, $value, $options) . $errorString;
    }
}

扩展输入外观.php

use Illuminate\Support\Facades\Facade;

class ExtendedInputFacade extends Facade {

    protected static function getFacadeAccessor() { return 'extendedInput'; }

}

扩展输入服务提供商.php

use Illuminate\Support\ServiceProvider;

class ExtendedInputServiceProvider extends ServiceProvider {

    public function register()
    {
        $this->app->bind('ExtendedInput', function()
        {
            return new ExtendedInput;
        });
    }

}

config/app.php

'providers' => [
    'App\App\ExtendedInput\ExtendedInputServiceProvider',
    // ..
],

关于validation - 在 View 中呈现验证错误,避免重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30028715/

相关文章:

JavaScript DRY 对象构造函数

javascript - Parsley.js - 仅验证数字的可选输入

如果值在数组中,AngularJS 输入有效

validation - Yii 中一个属性的多重验证

validation - AlertDialog中的TextFormField无法验证

php - 如何从 Laravel 5.2 应用程序向 Bugsnag 报告任何和所有异常

javascript - 如何使用 Laravel 在 php 函数中回显 vuejs 数据?

php - 如何将 mysql 查询转换为 laravel?

javascript - 如何在不使用 "__dirname"或 "import.meta.url"的情况下获取 Node.js 中当前模块的目录?

css - 将 CSS 应用于属性和媒体查询