这是Laravel 4.2
Laravel会为视图提供$ error MessageBag。通过重定向->withErrors()
,可以在上一页页面中使用Flash消息填充此消息。如果您要重定向到新页面,这很好。
return Redirect::route('my_route')->withErrors($validator);
我在控制器中生成了一些错误,没有验证表单,并希望将这些消息放入Laravel自动传递给视图的$ errors MessageBag中。但是怎么样? MessageBag是某处,但我该如何处理它,如何添加一些消息以显示在当前页面中?
答案 0 :(得分:7)
看起来我可以在创建视图时注入消息。
我的控制器将所需的视图及其收集的数据传递给页面模板的内容,如下所示:
$this->layout->content = View::make('my.view', $view_data);
错误可以像这样传递:
$this->layout->content = View::make('my.view', $view_data)->withErrors($my_errors);
其中$ my_errors可以为null或array()(表示“无附加错误”),文本消息数组或MessageBag。
我的外页模板然后只是收集消息(如果它们存在),并将它们显示在页面顶部:
@if ( $errors->count() > 0 )
...An error occured...
@foreach( $errors->all() as $message )
...{{ $message }}...
@endforeach
@endif
(适当时加标记)
答案 1 :(得分:4)
我已经通过一些自定义验证完成了这项工作。你需要的是这样的:
use Illuminate\Support\MessageBag;
class MyCustomValidator
{
protected $errors = array();
protected $messageBag;
public function __construct(MessageBag $messageBag)
{
$this->messageBag = $messageBag;
}
public function setErrors($errors = array())
{
for($i = 0; $i < count($errors); $i++) {
$this->messageBag->add($i, $errors[$i]);
}
$this->errors = $this->messageBag;
}
public function getErrors()
{
return $this->errors->all();
}
}
在您的控制器中,您必须调用类似
的内容$validator = new MyCustomValidator();
$validator->getErrors();
您可以访问MessageBag in the docs的完整文档。
答案 2 :(得分:2)
Laravel 5
$validator = .......
$validator->after(function($validator) {
.....
$validator->errors()->add('tagName', 'Error message');
.....
});
请注意,这个无穷大的函数属于类的范围,而不是那个 您使用它的功能。如果你需要来自外部世界的某个变量的值,它必须是一个类变量!
答案 3 :(得分:0)
迟到但在错误消息包中添加自定义消息的另一个解决方案是:
<强>控制器强>
Paragraph
查看强>
$rules = array(
'email' => 'required|exists:users,email|email|max:32',
'password' => 'required|max:20'
);
$validator = Validator::make($request->all(),$rules);
$email = $request->email;
$password = $request->password;
$validateUser = new user();
$users = $validateUser::where('email', $email)->get();
if($users->isEmpty()){
$validator->getMessageBag()->add('email', 'Invalid Email Address');
return redirect('home')->withErrors($validator);
}
foreach ($users as $user) {
$data = $user->showAdminData();
if($user->role_id!=1){
$validator->getMessageBag()->add('email', 'Unauthorised access');
}
if(Crypt::decrypt($user->password)!==$password){
$validator->getMessageBag()->add('password', 'Invalid Password');
}
}
return redirect('home')->withErrors($validator);