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 が行うことは 2 つです。最初にエラーがスローされます: 区切り文字は英数字またはバックスラッシュであってはなりません。array_push($zipcode); で試してから 関数では機能しませんでした。私にはそれについての手がかりがありません。

次に、Deliveryarea のビューにエラー メッセージが常に表示されます。関数が true をスローしたか false をスローしたかは問題ではありません。

前もって感謝します。

4

1 に答える 1

0

解決策を見つけました。Cake は、ルールが呼び出される特定のクラスにカスタム検証ルールが存在することを望んでいます。そのため、クラス ポストでカスタム ルールを呼び出すときは、カスタム関数をクラス ポストに書き留めておく必要があります。そうしないと、cake がそれを見つけられず、毎回 false と検証されます。

ここで行う魔法は、validation-function を呼び出すクラスで使用する appmodel-class をインポートすることです。これは、次のステートメントで機能します。

$Zipcode = ClassRegistry::init('使用するクラス - 私の場合は "Zipcode"');

ただし、テーブルが hasAny や belongsTo などで互いに関連付けられている場合、カスタム関数はそれがなくても機能します。見逃してはならないもう 1 つの重要な点は、すべての検証関数を "パブリック関数 xyz" で導入する必要があることです。そうしないと、cake もそれらを見つけられません。

于 2013-04-20T08:13:00.283 に答える