0

「独自の」検証ルールが存在しますか (存在する場合、どのように実装しますか?)、またはコールバックを介して実装する必要がありますか? ありがとう。

4

3 に答える 3

3

)私が知る限り、検証クラスの普遍的な「一意の」(または「is_unique」)ルールはありません。これはおそらく、この種のチェックの定期的な性質が原因ではありません。

ただし、うまくやりたい場合は、アプリケーションで使用するすべてのモデルに対して「ベースモデル」を作成できます(ベースモデルを拡張するようにします)。次に、一意性は次のように多かれ少なかれチェックできます。

public function is_unique($id)
{
    return ! (bool) DB::select(array(DB::expr('COUNT(id)'), 'total'))
        ->from($this->_table_name)
        ->where('id', '=', $id)
        ->execute()
        ->get('total');
}

検証ルールで、次のルールを追加する必要があります。

array('id' => array(array(array($this, 'is_unique')));

推奨されるように、メソッドに内部モデルルールを保存していrules()ます。したがって、これは実際の例である可能性があります。

class Model_Base_Model extends ORM
{
    public function rules()
    {
        return array(
            'id' => array(
                array(array($this, 'is_unique')),
            );
    }


    public function is_unique($id)
    {
        return ! (bool) DB::select(array(DB::expr('COUNT(id)'), 'total'))
            ->from($this->_table_name)
            ->where('id', '=', $id)
            ->execute()
            ->get('total');
    }
}

これで、 Model_Base_Modelを拡張するすべてのモデルが、作成中にその一意性を確認できるようになります。お役に立てれば!:)

于 2011-06-02T18:36:13.370 に答える
3

Kohana 3.2 では、ORM にはチェックを行う unique() メソッドがあります。3.1 に存在するかどうかはわかりませんが、存在するはずです。

これで、次のようにモデルにルールを追加できます。

array(array($this, 'unique'), array('some_field', ':value')),

some_field が一意かどうかを確認します

于 2012-01-13T16:06:26.860 に答える
0

これを読んでください: http://kohanaframework.org/3.1/guide/kohana/security/validation

于 2011-06-02T18:28:36.990 に答える