Проверка формы CakePHP перед отправкой сообщения в запрошенную функцию контроллера - PullRequest
1 голос
/ 26 февраля 2011

Моя проверка работает как есть, но я хочу отобразить ошибку проверки до контроллера поиска. Я понимаю, что это может быть невозможно в рамках CakePHP.

У меня есть модель plan.php . И в plan_controller.php у меня есть функция с именем search () .

Моя форма вызывает search () как и ожидалось (потому что нет модели поиска):

echo $this->Form->create('Plan', array('action' => 'search'));

В существующем состоянии, когда я отправляю результаты поиска, отображаются ошибки, а URL-адрес изменяется на ... / поиск, поэтому результаты не отображаются («По данному критерию поиска найдено 0 результатов, но правильные ошибки проверки»). отображаются ниже обязательных полей формы.

Я не хочу, чтобы отображался URL-адрес ... / search. Я хочу, чтобы форма «остановилась» и просто отображала ошибки проверки без изменения URL-адреса на функцию поиска.

Я вызываю форму поиска внутри элемента, потому что форма поиска отображается на нескольких разных страницах.

Подводя итог: форма поиска должна проверяться без изменения пути URL на имя действия контроллера поиска. Конечно, проверка выполняется в модели search () и plan.php, поэтому я просто не знаю, как обойти это, и думаю, возможно ли это вообще.

Ответы [ 2 ]

1 голос
/ 26 февраля 2011

Вы можете использовать метод validates() модели, чтобы проверить, проверяет ли она, а затем перенаправить обратно.

Предполагая, что ваша модель называется Планом, это будет ваш контроллер

$errors = array();
if (!$this->Plan->validates($this->data)) {
   //errors occured
   $errors = $this->Plan->invalidFields();
   $this->Session->save('Plan.errors', $errors);
   $this->redirect('/plans');
}

И по вашему мнению.

if ($this->Session->check('Plan.errors')) {
   $errors = $this->Session->read('Plan.errors');
   $this->Session->delete('Plan.errors'); //don't want it again

}

В обоих случаях убедитесь, что помощник / компонент сеанса фактически назначен вашему представлению и контроллеру

0 голосов
/ 26 февраля 2011

OK.Выкрутил рабочее решение w / implode, но теперь мои ошибки отображаются только в макете по умолчанию, а не в полях формы, к которым они принадлежат. Так что теперь мне нужно знать, как вернуть ошибки ниже полей формы.

Рабочий код:

...else {
          $errors = $this->Plan->invalidFields();
          $error_messages = implode(' ',$errors);
          $this->Session->setFlash($error_messages);
          $this->redirect('/');
        }...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...