开发者

Applying form errors manually

开发者 https://www.devze.com 2023-02-28 01:58 出处:网络
I have a situation where I\'m editing a snippet of data within a larger context. The user submits this data to a specialized action for handling and redirects back to the parent page. Because it\'s a

I have a situation where I'm editing a snippet of data within a larger context. The user submits this data to a specialized action for handling and redirects back to the parent page. Because it's a redirection, validation errors aren't getting automagically set, so I'm trying to work around that.

In the event of an error, I'm writing a validation_errors key to the session with a value of $m开发者_如何学编程odel->validationErrors. In the form, though, I'd like to tell Cake to set each error so I can leverage my existing styles and not have to make a lot of changes to my $this->Form->input() methods.

Is something like this possible? Essentially, I'm looking to manually achieve the same result you'd get if a regular form was submitted and allowed to drop through with validation errors. I was hoping I could loop over each validation error and set the field error, but that's not making any change at all.

Thanks.


This can be achieved in the controller by

$this->Model->invalidate('fieldName', __('ErrorMessage', true));

If the values are available, you can also call

$this->Model->validates();

to validate all values with the validators defined in the model.


Save the data to the session and revalidate it.

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


If you want to do the same with CakePHP 3, use the method "errors".

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号