1

関係を通じてhas_manyを検証する検証ルールをKohana3で作成することは可能ですか?

ガイドページの例を使用すると、ブログ投稿はテーブル全体で多くのカテゴリを持つことができcategories_postsます。少なくとも1つのカテゴリが追加されたことを確認するために、投稿モデルで設定できる検証ルールはありますか?

私は次のことを試しました:

public function rules()
{
    return array(
        'categories' => array(
            array(array($this, 'has'), array('categories'))
        )
    );
}

ORM::has関数がtrue/falseを返すことがわかるからです。しかし、「カテゴリ」は関係であり、フィールドではないため、私が作成したルールはチェックされないと思います。

何か案は?

4

3 に答える 3

1

リレーションPostを追加する前に保存する必要があります。has_many保存後にカテゴリを確認Postし、設定されていない場合はドラフトとしてマークすることができます。

于 2012-06-05T17:48:16.410 に答える
0

うわー、いい考え。MVCデザインパターンに焦点を当てます。それはMではなくCビジネスだと思います。

if ($post->categories->find_all())
{
   //blablabla
}
于 2012-06-05T13:03:20.213 に答える
0

カテゴリ投稿テーブルの外部にあるため、外部検証を使用することをお勧めします。Model_Post::rule_has_valid_categories($submitted_categories, $post)送信されたカテゴリがこの投稿に対して有効かどうかを示すブール値を返すという関数を作成します。

次に、投稿を保存する直前に追加のルールを作成します。

$extra_rules = Validation::factory(array('categories' => $submitted_categories))
    ->rule(
    'categories',
    'Model_Post::rule_has_valid_categories',
    array(':value', ':model')
);

try
{
    $post->save($extra_rules);
}
catch (ORM_Validation_Exception $e)
{
    // if categories rule failed, array will contain _external[categories] field
    print_r($e->errors('models')); 
}

メッセージは/application/messages/models/post/_external.phpに保存します。

return array(

    'categories' => array(
        'Model_Post::rule_has_valid_categories' => 'Invalid categories'
    ),

);
于 2013-03-12T18:54:23.113 に答える