Обратите внимание: я больше не пытаюсь сделать это, потому что я нашел альтернативу, но в будущем может быть полезно узнать ответ.
У меня есть форма, которая находится в представлении(index.ctp), связанный с действием index () на контроллере.Эта форма должна отправлять данные другому действию contact () в том же контроллере.Это второе действие не имеет представления, оно просто обрабатывает информацию и перенаправляет пользователя в соответствии с результатом.Это действие выполняет проверку и перенаправление пользователя на реферер (в данном случае индекс) в случае ошибки, а затем ошибка должна отображаться в индексе.Обратите внимание, что модель не использует таблицу базы данных, но она используется только для определения правил проверки.
Проверка выполняется правильно и сообщает об ожидаемых ошибках.Чтобы извлечь ошибки после перенаправления, он записывает массив $ this-> ModelName-> invalidFields () в переменную сеанса, которая извлекается в действии index () после перенаправления.Этот массив передается в переменную $ errors для представления.Теперь приходит проблема.Ошибки, хотя и передаются корректно между перенаправлениями, не привязываются к соответствующим формам.Как я могу сделать это?Форма имеет все условные имена, поэтому она должна быть автоматической, но это не так.
Вот часть соответствующего кода:
Индекс:
echo $this->Form->create('Contact', array('url' => '/contacts/contact'));
echo (rest of form) ...
echo $this->Form->end(__('send message', true));
Контроллер контактов:
function index() {
if ($this->Session->check('Contact.errors')) {
$this->set('errors', $this->Session->read('Contact.errors'));
}
}
function contact() {
if (!empty($this->data)) {
$this->Contact->set($this->data);
if ($this->Contact->validates()) {
(send the email)
}
else {
$this->Session->write('Contact.errors', $this->Contact->invalidFields());
$this->redirect($this->referer);
}
}
}