0

我有一个问题想告诉你。我已经在课堂帖子的 appmodel 中设置了自定义验证规则。

'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(
            'rule' => 'ZipExists',
            'message' => 'Postleitzahl existiert nicht!'            
        )
    )

函数 ZipExists 也在 appmodel 中编码,但在类 zipcode 中。

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

debug($valid) 抛出正确的数字:如果函数找到有效的邮政编码,则为 1,否则为 0。这意味着该函数被正确调用。但是 Cake 所做的有两件事。首先它会抛出一个错误:分隔符不能是字母数字或反斜杠。自从尝试使用 array_push($zipcode); 在函数中不起作用我对此一无所知。

其次,Deliveryarea 视图中的错误消息一直显示,无论函数抛出 true 还是 false。

提前致谢。

4

1 回答 1

0

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

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

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

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

于 2013-04-20T08:13:00.283 回答