Kohana 3:通过关系验证has_many的规则

时间:2012-06-04 20:50:41

标签: kohana kohana-3 kohana-orm kohana-3.2

是否可以在Kohana 3中创建验证规则以验证has_many通过关系?

使用guide page上的示例,博文可以在categories_posts表中包含多个类别。是否有可在Post模型中设置验证规则以验证是否添加了至少一个类别?

我尝试了以下内容:

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

因为我看到ORM::has函数将返回true / false。但我认为因为'类别'是一种关系,而不是一个领域,我写的规则永远不会被检查。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

在添加Post关系之前,您必须保存has_many。您可以在保存后检查Post类别,如果未设置,则将其标记为草稿。

答案 1 :(得分:0)

哇,好主意。 专注于MVC设计模式。我认为这是C业务而不是M.

if ($post->categories->find_all())
{
   //blablabla
}

答案 2 :(得分: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'
    ),

);