【问题标题】:Cake PHP delimiter must not be alphanumeric or backslash with custom validation rule [duplicate]Cake PHP 分隔符不能是带有自定义验证规则的字母数字或反斜杠 [重复]
【发布时间】:2013-04-18 19:13:18
【问题描述】:

我有一个问题想解决。 我已经在课堂帖子的 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。

提前致谢。

【问题讨论】:

  • 前两条校验规则可以替换为postal校验,也支持德国邮政编码校验; book.cakephp.org/2.0/en/models/… 但是,我怀疑错误消息可能是由另一个验证规则引起的,CakePhp 将其解释为正则表达式。您是否尝试禁用所有其他验证规则以缩小问题范围?
  • 禁用所有其他功能没有任何改变。在构建您提到的邮政功能后,我收到错误消息,即 Cake 无法再次找到 zipexists 的验证处理程序:'DELIVERYAREA' => array('rule-1' => array('rule' => array(' postal', null, 'de'), 'message' => 'Bitte eine gültige Postleitzahl eingeben.', 'last' => true ), 'rule-2' => array('rule' => array('ZipExists '), 'message' => 'Postleitzahl existiert nicht!' ) )
  • 经过大量阅读和调试后,我强烈认为 Cake 想要在 post-class 中使用自定义函数“ZipExists”——即调用它的类。但是我需要调用该函数,而它存在于类 Zipcode 中。但是到目前为止,这本书和网络都没有提供关于这个主题的内容。也许我只是在查找信息时运气不好?!

标签: php cakephp validation cakephp-2.0


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2016-07-26
    相关资源
    最近更新 更多