Laravel 5.5 自定义 Blade 提供者 if 语句

Laravel 5.5 Custom Blade Provider if statement

我想创建一个自定义 blade 提供程序来清理我的代码。

public function boot() {
    Blade::if ('hasError', function ($field) {
        return session('errors')->has($field);
    });
}

这是我在视图中使用的方式:

@hasError('email') has-error @endif

但我收到此错误消息:

Call to a member function has() on null ...

有人知道吗?

而不是:

return session('errors')->has($field);

这样做:

return session()->has('errors.' . $field);
if($validator->fails()) {
   return session()->has('errors.' . $field);

您可以使用

在您的视图中捕获错误
@if ($errors->any())
        {{ implode('', $errors->all('<div>:message</div>')) }}
@endif

更新

要在每个字段下显示错误,您可以这样做。

<input type="text" name="firstname">
@if ($errors->has('firstname'))
    <div class="error">{{ $errors->first('firstname') }}</div>
@endif

目前这与视图中的相同:

@if (session('errors')->has('email'))
 has-error
@endif

使用 Blade::if 指令,如果你想在视图中显示:

@hasError('email')
 has-error
@endhasError

从 Laravel 5.5:

开始,您的启动方法中应该有这样的东西
use Illuminate\Support\Facades\Blade;
public function boot() {

Blade::if('hasError', function ($field) {
    if(session()->has($field){
        /* some validation code 
         if(validation){return true}else{return false;}
        */
    }else{
       return false;
    }
});

Example

Documentation