Обработка ошибок в CakePHP, возвращающая публикуемые пользователем значения в форму? - PullRequest
0 голосов
/ 16 февраля 2012

Как правило, обычный способ обработки ошибки - просто выполнить перенаправление следующим образом:

if ({something that is error}) {
    $this->Session->setFlash(__('Error message'), true);
    $this->redirect(array('controller' => 'some_controller', 'action' => 'some_action'));
}

Однако, есть несколько проверок, которые происходят во время раздела if ($this->request->is('post')) { метода. Если какая-либо из проверок не удалась, я хочу выйти из остальных проверок, вернуть пользователя в форму со всеми настройками, которые он ввел ранее, чтобы им не пришлось снова заполнять формы. Как мне это сделать?

public function custom_method() {
    // get some information here

   if ($this->request->is('post')) {
       // do_check
       if (!do_check) {
          // set flash
          // log error
          // don't run the rest of the checks - go to end of the if ($this->request->is('post'))
       }

       // do other check
      if (!do_other_check) {
          // set flash
          // log error
          // don't run the rest of the checks - go to end of the if ($this->request->is('post'))
      }

      // do database update
   }

   // do other stuff here
   // then it goes to render view 
}

1 Ответ

0 голосов
/ 16 февраля 2012

Я разработал отличное решение для этого после разговора с моим хорошим другом (спасибо @utoxin)!Он помог мне подтолкнуть меня в правильном направлении, упомянув о проверке модели.

Вот как я это сделаю:

public function prepare() {

   // do some stuff here

   if ($this->request->is('post')) {
      $postValid = true;


      if ($postValid and !some_check) {
    $this->log('Log error here', 'error');
    $this->Model->invalidate('form_field', 'No valid installation file was found for this version.');
    $postValid = false;
      }

      if($postValid){
        // no error, do redirect, continue successfully
      }
   }

   // do other stuff here
   // show form
}
...