【问题标题】:CakePHP 2.5 dynamic model validation: no flash messagesCakePHP 2.5 动态模型验证:无闪烁消息
【发布时间】:2014-06-04 22:24:30
【问题描述】:

我正在为 CakePHP 重写我的联系表单插件

模型中只有虚拟字段,没有数据库表。 对于动态使用,我需要在beforeFilter() 函数中使用$this->Model->validator()->add() 即时添加验证。

这可行,但我在视图中没有收到任何验证错误。 它们仅在调用$this->Model->validates() 后存储在$this->Model->validationErrors 中。

当我将验证移到 $validate 变量中时,一切似乎都正常。 刷新消息和我的输入字段中的“必需”属性已设置。

我认为问题在于在将验证规则添加到模型之前渲染视图。

有什么建议吗?谢谢

【问题讨论】:

  • 感谢 Gergo 的编辑 :)
  • 我想我不明白为什么你不能通过将验证规则放在 $validate 属性中来验证正常的方式..?
  • 我试图让插件对其他人更方便,所以他们只需要在 bootstrap.php 中修改插件的配置变量
  • 您能否更改模型的构造函数,以便将正确的验证规则直接添加到其 $validate 属性中?
  • 是的,这似乎有效。谢谢!

标签: php validation cakephp


【解决方案1】:

感谢凯的创意!

这适用于模型:

public $validate = array();

public function __construct($id = false, $table = null, $ds = null) {
    parent::__construct();
    foreach(Configure::read('ContactForm.Fields') as $fieldname => $value) {
        $this->validate[$fieldname] = $value['validation'];
    }
}

配置如下:

Configure::write('ContactForm.Fields', array(
    'Name' => array(
        'schema' => array(
            'type' => 'string',
            'null' => false,
            'default' => '',
            'length' => '50'
        ),
        'validation' => array(
            'rule' => array('notempty'),
            'required' => true,
            'message' => 'please insert your name'
        )
    )
));

Flash 消息现在可见 ;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    相关资源
    最近更新 更多