我在验证表单后尝试显示错误。
我在视图上使用此代码:
@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。
答案 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
答案 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">×</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