请注意:我不再试图这样做,因为我找到了另一种方法,但将来知道答案可能会有用。
我有一个与控制器上的index()操作关联的视图(index.ctp)中的表单。该表单应将数据发布到同一控制器中的另一个操作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);
}
}
}
答案 0 :(得分:0)
我认为在会话变量中编写验证错误并不是一个好主意。我不是CakePHP专家,但我不认为这是你应该这样做的方式。您的所有表单都应指向您所在的网址,因此用户输入的数据不会丢失。
您可以在问题中添加一些代码吗?