0

我在 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;
    }
  }

我希望这很容易吗?提前致谢

4

4 回答 4

0

我认为这:

'Zipcode.zipcode' =>$zipcode

...需要是这样的:

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

于 2013-04-18T06:07:43.903 回答
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);
}
于 2013-04-18T08:07:51.693 回答
0

尝试仅用于模型验证。

  function ZipExists(){

    $valid = $this->find('count', array('conditions'=> array('Zipcode.zipcode' =>$this->data['Zipcode']['zipcode'])));
    if ($valid >= 1){
      return true;
    }
    else{
      return false;
    }
于 2013-04-18T08:09:38.697 回答
0

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

这里要做的魔术是在你调用验证函数的类中导入你想要使用的 appmodel-class。这适用于以下语句:

$Zipcode = ClassRegistry::init('Class to use - 在我的例子中是 "Zipcode"');

但是,如果您的表通过 hasAny 或 belongsTo 和其他东西相互关联,则自定义函数可以在没有这些的情况下工作。您不能错过的另一个重要点是,所有验证功能都必须使用“公共功能 xyz”引入,否则蛋糕也找不到它们。

于 2013-04-20T08:20:28.770 回答