1

是否可以在 Kohana 3 中创建一个验证规则来验证 has_many through 关系?

使用指南页面上的示例,一篇博客文章可以通过categories_posts表格有多个类别。是否可以在 Post 模型中设置验证规则以验证至少添加了一个类别?

我尝试了以下方法:

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

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

有任何想法吗?

4

3 回答 3

1

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

于 2012-06-05T17:48:16.410 回答
0

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

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 回答