未定义变量:$errors
Undefined variable: $errors
我尝试在验证表单后显示错误。
我在视图中使用此代码:
@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.
使用
@foreach($errors as $error)
{{ $error}}}
@endforeach
我使用这个语法来解决错误
使用 @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
$errors
变量可用于 Illuminate\View\Middleware\ShareErrorsFromSession
中间件中的视图。默认情况下,此中间件包含在 web
中间件组中。
如果您的路由未使用 web
中间件组,请确保它所在的任何组都包含此中间件(连同 Illuminate\Session\Middleware\StartSession
,因为错误存储在会话中)。
我认为最好使用像 jqueryValidator 这样的前端验证器。
因为要验证此表单,您必须关闭 browser.Then 中的 Javascript 它有时会损坏您在项目中加载数据表或相关 js 的工作。
但是如果您使用的是后端验证,这可能会帮助您更好地理解它。
这里,在 blade:
@if(!$errors->isEmpty())
<div class="alert alert-danger ">
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</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() 函数 class 中创建的请求 class
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',
];
The has method may be used to determine if any error messages exist
for a given field:
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
参考 Link : https://laravel.com/docs/5.3/validation
@patricus 回答得很好。
您可以将 'web' 中间件附加到您的路由,所有错误都将显示在视图中:
Route::get('path', Controller::class .'@method')->middleware(['web']);
如果您正在获取 "Undefined variable: $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 所述:
The $errors variable is made available to the views in the
Illuminate\View\Middleware\ShareErrorsFromSession middleware. This
middleware is included in the web middleware group by default.
If your route is not using the web middleware group, make sure that
whatever group it is in includes this middleware (along with
Illuminate\Session\Middleware\StartSession, since the errors are
stored in the session).
要解决此问题,请将受影响的路由包装在您的 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
我尝试在验证表单后显示错误。
我在视图中使用此代码:
@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.
使用
@foreach($errors as $error)
{{ $error}}}
@endforeach
我使用这个语法来解决错误
使用 @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
$errors
变量可用于 Illuminate\View\Middleware\ShareErrorsFromSession
中间件中的视图。默认情况下,此中间件包含在 web
中间件组中。
如果您的路由未使用 web
中间件组,请确保它所在的任何组都包含此中间件(连同 Illuminate\Session\Middleware\StartSession
,因为错误存储在会话中)。
我认为最好使用像 jqueryValidator 这样的前端验证器。 因为要验证此表单,您必须关闭 browser.Then 中的 Javascript 它有时会损坏您在项目中加载数据表或相关 js 的工作。
但是如果您使用的是后端验证,这可能会帮助您更好地理解它。
这里,在 blade:
@if(!$errors->isEmpty())
<div class="alert alert-danger ">
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</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() 函数 class 中创建的请求 class
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',
];
The has method may be used to determine if any error messages exist for a given field:
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
参考 Link : https://laravel.com/docs/5.3/validation
@patricus 回答得很好。
您可以将 'web' 中间件附加到您的路由,所有错误都将显示在视图中:
Route::get('path', Controller::class .'@method')->middleware(['web']);
如果您正在获取 "Undefined variable: $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 所述
The $errors variable is made available to the views in the Illuminate\View\Middleware\ShareErrorsFromSession middleware. This middleware is included in the web middleware group by default.
If your route is not using the web middleware group, make sure that whatever group it is in includes this middleware (along with Illuminate\Session\Middleware\StartSession, since the errors are stored in the session).
要解决此问题,请将受影响的路由包装在您的 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