2

从 Validator 循环遍历错误然后在表单元素之后立即呈现它们而不诉诸大量@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?

4

2 回答 2

3

我不知道任何包,但我只会创建自己的宏类,类似于 HTML builder 或 Form builder。

事实上,我可能会扩展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 包可以在这里找到

编辑

一个目录可能是:

/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;
    }
}

ExtendedInputFacade.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',
    // ..
],
于 2015-05-04T11:25:57.250 回答
0

我通常这样做:

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

如果错误存在,它会自动检查并显示它。希望这可以帮助。

于 2015-05-04T16:02:59.760 回答