这是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在某个地方,但是如何实现它,以及如何向其添加一些消息以显示在当前页面中?
看起来我可以在创建视图时注入消息.
我的控制器将所需的视图及其收集的数据传递给页面模板的内容,如下所示:
$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)
(适当时加标记)
我已经通过一些自定义验证做到了这一点。你需要的是这样的:
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 的完整文档。
| 归档时间: |
|
| 查看次数: |
19989 次 |
| 最近记录: |