【问题标题】:CakePHP Validation not displaying messagesCakePHP Validation 不显示消息
【发布时间】:2012-04-07 17:06:19
【问题描述】:

我最近才开始使用 CakePHP,并且无法在我为测试表单而创建的联系人应用程序中工作。一旦我在模式中设置了$validate 数组,星号就会出现在表单上,​​但是,当我提交表单时,我仍然没有收到验证消息。这是我的代码:

/app/View/Contacts/index.ctp

<h1>Contact Form</h1>
<?php
echo $this->Form->create('Contact');
echo $this->Form->input('name');
echo $this->Form->input('age');
echo $this->Form->end('Submit This Form!!!');
?>

/app/Controller/ContactsController.php

<?php
    class ContactsController extends AppController {

    public $helpers = array('Html', 'Form');

    public function index() {

    }
}
?>

/app/Model/Contact.php

<?php
class Contact extends AppModel {
    var $useTable = false;

    public $validate = array(
        'name' => array(
            'rule' => 'notEmpty',
            'message' => 'Cannot leave this field blank.'
        ),
        'age' => array(
            'rule' => 'notEmpty',
            'message' => 'Cannot leave this field blank.'
        )
    );
}
?>

【问题讨论】:

  • 从控制器内部,我会看一下 $this->Contact->validationErrors 属性。一定要调用 $this->Contact->set($this->data); (或 ->save(...)) 在检查验证错误之前,否则你每次只会得到一个空数组。

标签: php validation cakephp cakephp-model


【解决方案1】:

您的错误很可能出现在您没有向我们展示的代码中: 您如何在控制器中处理表单数据。 您可能忘记将数据设置到模型中。

在此处查看本教程: http://www.dereuromark.de/2011/12/15/tools-plugin-part-2-contact-form/

我猜你的空(!)索引操作。 你根本什么都没做。那应该如何触发验证?

我参考了上面的链接。它向您展示了如何使用 set() 和 validates() 来验证这样的表单。 基本上可以归结为:

if ($this->request->is('post') || $this->request->is('put')) {
    $this->ContactForm->set($this->request->data);
    if ($this->ContactForm->validates()) {
    }
}

PS:由于“联系人”在这里并不是一个真正的词,并不意味着应该意味着什么,我建议您将控制器重命名为“ContactController”。这也使网址/contact

【讨论】:

  • 不,ContactsController 是正确的。控制器名称应该是复数。
  • 我不是在谈论约定是什么(我很清楚它们)。我也没有告诉你你必须这样做。我只是向您建议这样做是明智的(如博客中所述),但无论哪种方式,您仍然没有向我们展示相关信息。
  • 我相信你认为 Juhana 就是我——因为你说“不管怎样,你仍然没有向我们展示相关信息。” Juhana 不是 OP。我实际上向您展示了我所拥有的一切,我将阅读您发布的链接,但我昨天才开始使用 Cake,并且感觉我可以在继续使用控制器之前进行验证。我会看看,让你知道它是否有效。感谢您的所有帮助!
  • 我意识到错误为时已晚(无法编辑评论)。我确实编辑了我的答案(关于空索引操作的部分)。您需要在此处手动触发验证。请在您的问题上提供确切的 cakephp 版本(在这种情况下可能是 2.1)。这将有助于给出适当的答案。
  • 完全有效。感谢您耐心等待并握住我的手。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多