手动应用表单错误

时间:2011-04-23 15:57:18

标签: validation cakephp cakephp-1.3

我遇到的情况是我在更大的上下文中编辑数据片段。用户将此数据提交给专门的操作以进行处理并重定向回父页面。因为它是一个重定向,验证错误没有自动设置,所以我试图解决这个问题。

如果发生错误,我正在为会话编写validation_errors密钥,其值为$model->validationErrors。但是,在表单中,我想告诉Cake设置每个错误,以便我可以利用我现有的样式,而不必对我的$this->Form->input()方法进行大量更改。

这样的事情可能吗?从本质上讲,我希望手动获得相同的结果,如果提交常规表单并允许通过验证错误。我希望我可以遍历每个验证错误并设置字段错误,但这根本没有任何改变。

感谢。

3 个答案:

答案 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”。