在$ error MessageBag中添加一条消息

时间:2014-08-21 23:24:08

标签: php laravel

这是Laravel 4.2

Laravel会为视图提供$ error MessageBag。通过重定向->withErrors(),可以在上一页页面中使用Flash消息填充此消息。如果您要重定向到新页面,这很好。

return Redirect::route('my_route')->withErrors($validator);

我在控制器中生成了一些错误,没有验证表单,并希望将这些消息放入Laravel自动传递给视图的$ errors MessageBag中。但是怎么样? MessageBag是某处,但我该如何处理它,如何添加一些消息以显示在当前页面中?

4 个答案:

答案 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);