【问题标题】:CakePHP validation error messages - how to pass them around?CakePHP 验证错误消息 - 如何传递它们?
【发布时间】:2010-12-28 17:12:19
【问题描述】:

请注意:我不再尝试这样做,因为我找到了替代方案,但知道答案可能对将来有用。

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

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

【问题讨论】:

    标签: validation cakephp forms


    【解决方案1】:

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

    您能在您的问题中添加一些代码吗?

    【讨论】:

    • 我可以添加我正在使用的代码(如果我没有删除它),但这更像是一个理论问题。我会尝试重写它并在这里发布。我试图这样做是为了遵循功能分离的原则。
    • 好吧,这不是您应该进行验证的方式。
    • 为什么?用户数据不会丢失,因为它保存在会话变量中。这是默认的 cakePHP 行为。我想扩展它以包括错误。这有什么不好?
    • 你好,devius,我知道你发布这个已经很久了,但你能找到解决方案吗?我还需要在重定向后保留验证数据。
    猜你喜欢
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多