Validation 手动应用表单错误

Validation 手动应用表单错误,validation,cakephp,cakephp-1.3,Validation,Cakephp,Cakephp 1.3,我遇到的情况是,我在更大的上下文中编辑一段数据。用户将此数据提交给专门的操作进行处理,并重定向回父页面。因为这是一个重定向,验证错误不会自动设置,所以我正在努力解决这个问题 如果发生错误,我将为会话编写一个值为$model->validationErrors的验证\u errors键。不过,在表单中,我想告诉Cake设置每个错误,这样我就可以利用现有的样式,而不必对我的$this->form->input()方法进行太多更改 这样的事情可能吗?从本质上说,我希望手动实现与提交常规表单并允许删除带

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

如果发生错误,我将为会话编写一个值为
$model->validationErrors
验证\u errors
键。不过,在表单中,我想告诉Cake设置每个错误,这样我就可以利用现有的样式,而不必对我的
$this->form->input()
方法进行太多更改

这样的事情可能吗?从本质上说,我希望手动实现与提交常规表单并允许删除带有验证错误的表单时相同的结果。我希望我可以循环每个验证错误,并设置字段错误,但这根本没有任何改变


谢谢。

这可以通过以下方式在控制器中实现:

$this->Model->invalidate('fieldName', __('ErrorMessage', true));
如果这些值可用,也可以调用

$this->Model->validates();

使用模型中定义的验证器验证所有值。

这可以通过以下方式在控制器中实现:

$this->Model->invalidate('fieldName', __('ErrorMessage', true));
如果这些值可用,也可以调用

$this->Model->validates();

使用模型中定义的验证器验证所有值。

将数据保存到会话并重新验证

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();
   }
}

将数据保存到会话并重新验证它

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();
   }
}

如果要对CakePHP 3执行相同操作,请使用“errors”方法。

如果要对CakePHP 3执行相同操作,请使用“errors”方法。

可能重复的