我在Cake 2.X中遇到了自定义验证规则的问题

我想检查输入的邮政编码是否有效,因此从类发布中调用类邮政编码中的函数。

但是验证始终会返回false。

上课后的Appmodel(规则3):

'DELIVERYAREA' => array(
        'rule-1' => array(
            'rule' => array('between', 5, 5),
            'message' => 'Bitte eine fünfstellige Postleitzahl eingeben'
        ),
        'rule-2' => array(
            'rule' => 'Numeric',
            'message' => 'Bitte nur Zahlen eingeben'
        ),
        'rule-3' => array(
            'exists' => array(
                'rule' => 'ZipExists',
                'message' => 'Postleitzahl existiert nicht!'
            )
        )
    ),

邮编类中的Appmodel:

class Zipcode extends AppModel {
  var $name = 'Zipcode';

  var $validate = array(
    'zipcode' => array(
       'length' => array(
              'rule' => array('maxLength', 5),
              'message' => 'Bitte einen Text eingeben'
          ),
         'exists' => array(
          'rule' => array('ZipExists'),
          'message' => 'Postleitzahl existiert nicht!'

       )
    )         
  );

  function ZipExists($zipcode){

    $valid = $this->find('count', array('conditions'=> array('Zipcode.zipcode' =>$zipcode)));
    if ($valid >= 1){
      return true;
    }
    else{
      return false;
    }
  }

我希望这很简单吗? 提前致谢

===============>>#1 票数:0

我认为这:

'Zipcode.zipcode' =>$zipcode

...需要这样:

'Zipcode.zipcode' =>$zipcode['zipcode']

===============>>#2 票数:0

小心验证规则中的期望。 使用debug()等找出确切的含义。$ data在这里始终是一个数组。

public function zipExists($data) {
    $zipcode = array_shift($data); // use the value of the key/value pair
    $code = $this->find('first', array('conditions'=> array('Zipcode.zipcode' =>$zipcode)));
    return !empty($code);
}

===============>>#3 票数:0

尝试此操作仅用于模型验证。

  function ZipExists(){

    $valid = $this->find('count', array('conditions'=> array('Zipcode.zipcode' =>$this->data['Zipcode']['zipcode'])));
    if ($valid >= 1){
      return true;
    }
    else{
      return false;
    }

===============>>#4 票数:0 已采纳

我找到了解决方案。 Cake希望自定义验证规则位于调用规则的特定类中。 因此,当您在课堂帖子中调用自定义规则时,必须在课堂帖子中写下自定义函数,否则Cake不会每次都找到它并将其验证为false。

这里要做的魔术是将要使用的appmodel类导入您称为验证函数的类中。 这适用于以下语句:

$ Zipcode = ClassRegistry :: init('要使用的类-在我的情况下为“ Zipcode”');

但是,如果您的表通过hasAny或belongsTo和stuff相互关联,则自定义函数可以在没有该关联的情况下工作。 您一定不能错过的另一个重要点是,所有验证功能都必须以“ public function xyz”引入,否则,cake也找不到它们。

  ask by Karl translate from so

未解决问题?本站智能推荐: