在$ error MessageBag中添加一条消息

Jas*_*son 5 php laravel

这是Laravel 4.2

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

return Redirect::route('my_route')->withErrors($validator);
Run Code Online (Sandbox Code Playgroud)

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

Jas*_*son 8

看起来我可以在创建视图时注入消息.

我的控制器将所需的视图及其收集的数据传递给页面模板的内容,如下所示:

$this->layout->content = View::make('my.view', $view_data);
Run Code Online (Sandbox Code Playgroud)

错误可以像这样传递:

$this->layout->content = View::make('my.view', $view_data)->withErrors($my_errors);
Run Code Online (Sandbox Code Playgroud)

其中$ my_errors可以为null或array()(用于"无其他错误"),文本消息数组或MessageBag.

我的外页模板然后只是收集消息(如果它们存在),并将它们显示在页面顶部:

@if ( $errors->count() > 0 )
    ...An error occured...
    @foreach( $errors->all() as $message )
        ...{{ $message }}...
    @endforeach
@endif
Run Code Online (Sandbox Code Playgroud)

(适当时加标记)


Luí*_*ruz 5

我已经通过一些自定义验证做到了这一点。你需要的是这样的:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的控制器中,您必须调用类似

$validator = new MyCustomValidator();
$validator->getErrors();
Run Code Online (Sandbox Code Playgroud)

您可以在 docs 中访问 MessageBag 的完整文档。