【问题标题】:Cakephp validating specific field with specific rule without saving the data from controllerCakephp 使用特定规则验证特定字段而不保存来自控制器的数据
【发布时间】:2012-04-26 10:00:03
【问题描述】:

我想通过 Cakephp 模型验证来验证字段,而不保存数据,为此我在控制器中使用以下代码。

$this->Model->set($this->data);
if ($this->Model->validates()) {
   ......
}

但在这里我只想验证一些特定字段,例如“email_field”及其规则“email”之一。在模型中,我为“email_field”指定了一些其他规则,例如“unique”和“notempty”,但我不想验证这些规则。

如何实现?

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    上述方法肯定有效,但当 cake 已经记录了如何验证模型的特定字段时,这不是一个优雅的解决方案。

       if ($this->Model->validates(array('fieldList' => array('field1', 'field2')))) {
           // valid
       } else {
          // invalid
       }
    

    For more detail see cookbook

    【讨论】:

    • 'email_field' 的规则,如 'unique' 和 'notempty',我不想验证这些规则,我只想验证我们需要取消设置的 'email' 规则,如标记。
    【解决方案2】:

    你有不同的选择

    您可以动态取消设置其他规则:

    unset($this->Model->validate['field']['someRuleName']);
    

    或者您可以为该字段分配一个全新的规则集

    或者您可以使用不同的“不存在”字段进行此验证,例如具有特殊规则的“some_other_field”。

    【讨论】:

      【解决方案3】:
      ......
      $this->Registry->validate = array(
          'email_field' => array(
             'between' => array(
                  'rule' => array('between', 10, 100),
                  'message' => 'Your custom message here',
                  'required' => true,
              ),
          )
      );
      $this->Model->set($this->data); 
      if ($this->Model->validates(array('fieldList' => array('email_field')))) {
          ......
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-06
        • 2011-04-29
        • 1970-01-01
        相关资源
        最近更新 更多