未定义的变量:$ errors

时间:2017-01-02 19:22:43

标签: laravel laravel-5.3 laravel-blade

我在验证表单后尝试显示错误。

我在视图上使用此代码:

@if($errors->has())
            @foreach ($errors->all() as $error)
                <div>{{ $error }}</div>
            @endforeach
        @endif

并在控制器中:

public function searchActivity(Request $request){

    $this->validate($request, [
        'search' => 'required',
        'date' => 'required_with:search|required|date|after:yesterday'
    ]);

    return view(App::getLocale() . '.activities.ActivityResults');

}

但是不行。

可能会发生什么?

注意:我使用的是Laravel 5.3。

7 个答案:

答案 0 :(得分:4)

  

has方法可用于确定是否存在任何错误消息   对于给定的字段:

if ($errors->has('email')) {
    //
}

所以我们可以检查

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

参考链接:https://laravel.com/docs/5.3/validation

答案 1 :(得分:1)

使用@if($errors->any())代替@if($errors->has()) 如果这可以帮助这段代码与我合作

@if(!empty($errors))
    @if($errors->any())
        <ul class="alert alert-danger" style="list-style-type: none">
            @foreach($errors->all() as $error)
                <li>{!! $error !!}</li>
            @endforeach
        </ul>
    @endif
@endif

答案 2 :(得分:1)

我认为最好使用像 jqueryValidator这样的前端验证器。 因为要验证此表单,您必须在浏览器中关闭Javascript。然后,它有时会损坏您在项目中加载数据表或相关js的工作。

但如果您使用后端验证,这可能有助于您更好地理解它。

这里,在刀片中:

@if(!$errors->isEmpty())
    <div class="alert alert-danger ">
        <a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>

          <div class="error">
               {{--@if(isset($errors))--}}
                   {{ $errors->first('email') }}
                   {{ $errors->first('password') }}
                   {{ $errors->first('confirmPassword') }}
                   {{ $errors->first('FirstName') }}
                   {{ $errors->first('LastName') }}
                   {{ $errors->first('JoinDate') }}
                   {{ $errors->first('dob') }}
           </div>
    </div>
    @endif

rule()函数

中创建的请求类中

return [ 'email' => 'required|between:3,64|email|unique:employees', 'password' =>'required|min:5|max:10', 'confirmPassword' =>'required|same:password', 'FirstName' =>'required', 'JoinDate' =>'required|after:dob', 'LastName' =>'required', 'dob' =>'required', ];

答案 3 :(得分:1)

@patricus做了很好的回答。

您可以追加“网络”#39;中间件到您的路线,所有错误都将显示在视图中:

Route::get('path', Controller::class .'@method')->middleware(['web']);

答案 4 :(得分:0)

使用

@foreach($errors as $error)

{{$ error}}}

@endforeach

我将此语法用于错误

答案 5 :(得分:0)

$errors变量可供Illuminate\View\Middleware\ShareErrorsFromSession中间件中的视图使用。默认情况下,此中间件包含在web中间件组中。

如果您的路由未使用web中间件组,请确保它所在的任何组包含此中间件(以及Illuminate\Session\Middleware\StartSession,因为错误存储在会话中)。

答案 6 :(得分:0)

如果获取“未定义的变量:$ errors ...”,请检查您的路由,并确保为路由分配了“ web”中间件。检查您的路线列表:

 php artisan route:list

从下面的示例输出中可以看到,管理路由没有分配“ web”中间件:

|        | GET|HEAD  | admin/home                              | home             | App\Http\Controllers\HomeController@index                                 | cors,auth
  |
|        | POST      | admin/login                             |                  | App\Http\Controllers\Auth\LoginController@login                           | cors,guest
  |
|        | GET|HEAD  | admin/login                             | login            | App\Http\Controllers\Auth\LoginController@showLoginForm                   | cors,guest
  |
|        | POST      | admin/logout                            | logout           | App\Http\Controllers\Auth\LoginController@logout                          | cors

如@patricus in his answer所述:

  

$ errors变量可用于   Illuminate \ View \ Middleware \ ShareErrorsFromSession中间件。这个   中间件默认包含在Web中间件组中。

     

如果您的路线未使用网络中间件组,请确保   它所在的任何组都包括此中间件(以及   Illuminate \ Session \ Middleware \ StartSession,因为错误是   存储在会话中)。

要解决此问题,请将受影响的路由包装在组中的routes / web.php或routes / api.php中,然后将“ web”中间件分配给该组,如下所示:

Route::group(['middleware' => 'web'], function () {
    Auth::routes();
});

然后再次检查:

php artisan route:list

示例输出:

|        | POST      | admin/login                             |                  | App\Http\Controllers\Auth\LoginController@login                           | cors,web,guest
  |
|        | GET|HEAD  | admin/login                             | login            | App\Http\Controllers\Auth\LoginController@showLoginForm                   | cors,web,guest
  |
|        | POST      | admin/logout                            | logout           | App\Http\Controllers\Auth\LoginController@logout                          | cors,web
  |
|        | POST      | admin/password/email                    | password.email   | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail     | cors,web,guest
  |
|        | POST      | admin/password/reset                    | password.update  | App\Http\Controllers\Auth\ResetPasswordController@reset                   | cors,web,guest
  |
|        | GET|HEAD  | admin/password/reset                    | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm    | cors,web,guest
  |
|        | GET|HEAD  | admin/password/reset/{token}            | password.reset   | App\Http\Controllers\Auth\ResetPasswordController@showResetForm           | cors,web,guest
  |
|        | POST      | admin/register                          |                  | App\Http\Controllers\Auth\RegisterController@register                     | cors,web,guest
  |
|        | GET|HEAD  | admin/register                          | register         | App\Http\Controllers\Auth\RegisterController@showRegistrationForm         | cors,web,guest