Применение ошибок формы вручную - PullRequest
0 голосов
/ 23 апреля 2011

У меня есть ситуация, когда я редактирую фрагмент данных в более широком контексте.Пользователь передает эти данные специализированному действию для обработки и перенаправляет обратно на родительскую страницу.Поскольку это перенаправление, ошибки проверки не устанавливаются автоматически, поэтому я пытаюсь обойти это.

В случае ошибки я пишу ключ validation_errors в сеанс сзначение $model->validationErrors.В форме, однако, я хотел бы сказать Cake, чтобы установить каждую ошибку, чтобы я мог использовать свои существующие стили и не нужно было делать много изменений в моих $this->Form->input() методах.

Это что-то вроде этоговозможный?По сути, я хочу добиться того же результата, который вы получили бы вручную, если бы была отправлена ​​обычная форма, в которой были допущены ошибки проверки.Я надеялся, что смогу пройтись по каждой ошибке валидации и установить ошибку поля, но это ничего не меняет.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 23 апреля 2011

Это может быть достигнуто в контроллере с помощью

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

Если значения доступны, вы также можете позвонить

$this->Model->validates();

для проверки всех значений с помощью валидаторов, определенных в модели.

0 голосов
/ 13 октября 2014

Если вы хотите сделать то же самое с CakePHP 3, используйте метод «ошибки».

0 голосов
/ 23 апреля 2011

Сохранение данных в сеансе и повторная проверка.

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