我刚开始测试Laravel。我正在使用带有一些字段的表单并尝试使用Laravel的内置验证器类来验证输入。
$input = Input::all();
$rules = array(
'fname' => 'required|max:100',
'lname' => 'required|max:100',
'email' => 'required|email',
);
$validation = Validator::make($input, $rules);
if ($validation->fails()){
return Redirect::to('inputform')
->with('input_errors', $validation->errors);
}
一切顺利,验证检查有效。验证失败时,我将错误放在名为input_errors
的会话变量中,并将其传递给视图。我的问题是我似乎无法显示错误。我使用foreach
尝试blade templating engine
循环,如下所示:
@foreach (Session::get('input_errors') as $message)
{{ What Should I put here? }}
@endforeach
如何显示作为数组返回的错误。我尝试将其引用为$message[0][0]
,但它无效。
感谢。
编辑:对不起,忘了提到我正在使用Laravel 3答案 0 :(得分:4)
获取错误的正确语法是......
$messages= $validation->messages();
不幸的是,仅凭这一点并不会让你回复这些消息。它将返回一个MessageBag
实例。这允许您提取所需的任何特定消息或所有消息。
如果你想获得所有信息,现在你可以做...
$errors = $messages->all();
这将返回一个数组,您可以在视图中循环显示错误。还有一些方法可以在特定字段上获取错误,例如......
$firstNameError = $messages->first('fname');
或
$firstNameErrors = $messages->get('fname');
我还建议在向视图发送错误消息时使用...
->with_errors($validation);
这会将错误刷新到会话并自动假设您将它们作为$errors
变量发送。然后,您可以使用。
{{ $errors->first('fname') }} // Blade approach
<?php echo $errors->first('email'); ?> // Non-blade approach
这样,您不必在视图中添加逻辑,尝试确定变量是否存在,然后再尝试回显它。