我尝试扩展 Laravel 4.2 验证,以根据某些业务规则检查所有表单数据是否有效(不仅仅是某些字段)。
我无法以任何正常方式扩展自定义验证器(要么太hacky,要么不够DRY),所以我决定在验证器成功后添加业务规则检查,然后添加我自己的错误消息和重定向。
它仍然很丑陋并且不起作用,但现在如果有人告诉我如何将消息添加到 session 中,我会很高兴。如果您想告诉我应该如何使用 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
...
用于设置 session 的代码是检查 AlreadyExists 后的前 5 行。我从某个论坛获得了它,但它似乎无法正常工作(如果我包含代码,我会得到一些“非对象”异常,因此它似乎会损坏 session 对象)
我认为我没有时间升级到 L5。
最佳答案
我通过创建一个新的错误消息包并将其添加到重定向来解决这个问题:
$mb = new Illuminate\Support\MessageBag();
$mb->add("form", "same data already exists");
...
return Redirect::route('x.create')->withErrors($mb)->withInput();
似乎我需要为包添加完整的命名空间,但最重要的是我需要休息:)
验证逻辑仍然很糟糕,但现在没有时间修改它。
关于php - 如何将我的消息添加到 Laravel 4.2 中的 $errors 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30174821/