我遇到的情况是我在更大的上下文中编辑数据片段。用户将此数据提交给专门的操作以进行处理并重定向回父页面。因为它是一个重定向,验证错误没有自动设置,所以我试图解决这个问题。
如果发生错误,我正在为会话编写validation_errors
密钥,其值为$model->validationErrors
。但是,在表单中,我想告诉Cake设置每个错误,以便我可以利用我现有的样式,而不必对我的$this->Form->input()
方法进行大量更改。
这样的事情可能吗?从本质上讲,我希望手动获得相同的结果,如果提交常规表单并允许通过验证错误。我希望我可以遍历每个验证错误并设置字段错误,但这根本没有任何改变。
感谢。
答案 0 :(得分:3)
这可以通过
在控制器中实现$this->Model->invalidate('fieldName', __('ErrorMessage', true));
如果值可用,您也可以致电
$this->Model->validates();
使用模型中定义的验证器验证所有值。
答案 1 :(得分:0)
将数据保存到会话并重新验证。
function childAction() {
if(isset($this->data)) {
$this->Session->delete('invalid_data');
if($this->Test->save($this->data)) {
// ...
} else {
$this->Session->write('invalid_data', $this->data);
}
$this->redirect(array('action'=>'parentAction'));
}
}
function parentAction() {
if($this->Session->check('invalid_data')) {
// This will cause $this->Test->validationErrors to be populated
// Assuming your parent page has the form set up properly, the
// errors will be automagically filled. ie: $form->input('Test.field1')
$this->Test->set($this->Session->read('invalid_data'));
$this->Test->validates();
}
}
答案 2 :(得分:0)
如果你想对CakePHP 3做同样的事情,请使用方法“errors”。