Validation CakePHP验证错误消息-如何传递?

Validation CakePHP验证错误消息-如何传递?,validation,cakephp,forms,Validation,Cakephp,Forms,请注意:我不再尝试这样做了,因为我找到了另一个选择,但知道答案在将来可能会有用 我有一个与控制器上的index()操作关联的视图(index.ctp)中的表单。该表单应将数据发布到同一控制器中的另一个操作contact()。第二个操作没有视图,它只是处理信息并根据结果重定向用户。此操作是在发生错误时执行验证并将用户重定向到referer(本例中为索引),然后错误应显示在索引中。请注意,该模型不使用数据库表,但它仅用于定义验证规则 验证正在正确进行,并报告预期的错误。为了在重定向后检索错误,它将$

请注意:我不再尝试这样做了,因为我找到了另一个选择,但知道答案在将来可能会有用

我有一个与控制器上的index()操作关联的视图(index.ctp)中的表单。该表单应将数据发布到同一控制器中的另一个操作contact()。第二个操作没有视图,它只是处理信息并根据结果重定向用户。此操作是在发生错误时执行验证并将用户重定向到referer(本例中为索引),然后错误应显示在索引中。请注意,该模型不使用数据库表,但它仅用于定义验证规则

验证正在正确进行,并报告预期的错误。为了在重定向后检索错误,它将$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);
        }
    }
}

我认为在会话变量中写入验证错误不是一个好主意。我不是CakePHP专家,但我不认为你应该这样做。所有表单都应该指向您所在的同一url,这样用户输入的数据就不会丢失


你能为你的问题添加一些代码吗?

我可以添加我正在使用的代码(如果我没有删除它的话),但这更像是一个理论问题。我会试着重写它并把它贴在这里。我试图这样做是为了遵循函数分离的原则。好吧,这不是你应该做验证的方式。为什么?用户数据不会丢失,因为它保存在会话变量中。这是默认的cakePHP行为。我想把它扩展到包括错误。这有什么不好?嗨,德维乌斯,我知道你发布这篇文章已经很久了,但是你能找到解决办法吗?我还需要在重定向后保留验证数据。