在View中显示验证错误,避免重复

时间:2015-05-04 11:13:26

标签: validation laravel dry blade laravel-validation

从Validator循环错误然后在表单元素后面显示它们而不诉诸大量@if子句的最佳方法是什么?

这不是很优雅,也不是DRY:

<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?

2 个答案:

答案 0 :(得分:3)

我不知道任何包,但我只是创建自己的宏类,类似于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

<强> ExtendedInput.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;
    }
}

<强> ExtenedInputFacade.php     

use Illuminate\Support\Facades\Facade;

class ExtendedInputFacade extends Facade {

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

}

<强> ExtendedInputServiceProvider.php     

use Illuminate\Support\ServiceProvider;

class ExtendedInputServiceProvider extends ServiceProvider {

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

}

<强>配置/ app.php

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

答案 1 :(得分:0)

我通常会这样做:

<input name="name" />
{{ $errors->first('name', '<div class="error">:message</div>') }}

它会自动检查错误是否存在并显示结果。 希望这有帮助。