0

ORMを拡張するモデルクラスを持つプロジェクトにKohana 3.3を使用しています。MySQL データベースには、このモデルに対応するテーブルがあります。このテーブルには、同じ値であってはならない 3 つの列があります。ユーザーがこのモデルに追加できるビューもあります。item1、2、3 はテキスト入力フィールドです。item1,2,3 が同じ値を持つことはできないというルールを適用するモデルに検証を記述しようとしています。コードの構造と関連部分は次のようなものです。

データベース テーブル:

id | column1 | othercolumns | item1 | item2 | item3 

モデルクラス:

public function rules(){
    return array(
        "item1" => array( array('matches', array(':validation',':field','item2') ) ),
        "item1" => array( array('matches', array(':validation',':field','item3') ) ),
        //same for item2 and item3
    );
}

thisthis、およびthisページを読みましたが、これをモデルに直接実装する方法がわかりません。(クライアント側の JavaScript でこれを行うこともできますが、それをフレームワークに任せるのは避けたいです!)

4

1 に答える 1

1

必要なのは検証コールバックだけです。

return array(
    'item1' => array(function($field, Validation $object, $compare1, $compare2) {
        $values = array($object[$field], $object[$compare1], $object[$compare2]);
        if (count(array_unique($values)) < count($values))
        {
            $object->error($field, 'unique_fields');
        }
    }, array(':field', ':validation', 'item2', 'item3'))
);

その簡単な例です。たとえば、動的フィールド数を使用できます。

于 2013-05-10T20:39:48.007 に答える