【发布时间】:2015-07-22 09:06:35
【问题描述】:
我尝试扩展 Laravel 4.2 验证以根据某些业务规则检查 所有 表单数据是否有效(不仅仅是某些字段)。
我无法以任何正常的方式扩展自定义验证器(太hacky或不够DRY),所以我决定在验证器成功后添加业务规则检查,然后添加我自己的错误消息并重定向。
它仍然很丑,而且不起作用,但现在如果有人告诉我如何将我的消息添加到会话中,我会很高兴。如果你想告诉我应该如何使用 Laravel 的自定义验证器,我已经包含了更多代码,这样你就可以更具体..:
$validator = Validator::make(Input::all(), $this->validationRules, $this->validationMessages);
if ($validator->fails()) {
if (0 == $id) {
return Redirect::route('x.create')->withErrors($validator)->withInput();
} else {
return Redirect::route('x.edit', $id)->withErrors($validator)->withInput();
}
} else {
//TESTs
if ($this->AlreadyExists($id)) {
$messages = new MessageBag();
if ($request->getSession()->get('errors')){
$messages = $request->getSession()->get('errors')->getBag('default');
}
$messages->add('form', 'same data already exists');
if (0 == $id) {
return Redirect::route('x.create')->withErrors($messages)->withInput();
} else {
return Redirect::route('x.edit', $id)->withErrors($messages)->withInput();
}
}
}
//all is ok. Save/update entity
...
设置会话的代码是检查 AlreadyExists 后的前 5 行。我从某个论坛得到它,但它似乎不能正常工作(如果我包含代码,我会得到一些“非对象”异常,所以它似乎破坏了会话对象)
我想我没有时间升级到 L5。
【问题讨论】:
-
可能忘记在代码中包含一些会话保存机制 - 应该检查 MessageBag 类,还有 $messages = new MessageBag();可能不是正确的结构,因为可能未设置错误 - 如果失败
标签: php validation laravel laravel-4