0

我正在使用dwightwatson/validating包在模型中创建验证规则。

我特别喜欢您可以为不同路线创建的自定义规则集。

模型

protected $rulesets = [
        'set_up_all' => [
            'headline' => 'required|max:100',
            'description' => 'required'
        ],
        'set_up_property' => [
            'pets' => 'required'
        ],
        'set_up_room' => [
            'residents_gender' => 'required',
            'residents_smoker' => 'required'
        ],
        'set_up_roommate' => [
            'personal_gender' => 'required',
            'personal_smoker' => 'required'
        ]
    ];

控制器

$post = new Post(Input::all());

if($post->isValid('set_up_all', false)) {
  return 'It passed validation';
} else {
  return 'It failed validation';
}

在上面的示例中,它在针对set_up_all规则集进行验证时效果很好。现在我想组合几个规则集并一起验证它们。

根据文档,该包提供了一种合并规则集的方法。我只是不知道如何将提供的示例集成到我当前的流程中。

根据文档,我需要实现这一行:

$mergedRules = $post->mergeRulesets('set_up_all', 'set_up_property_room', 'set_up_property');


这是我的尝试,但没有奏效:

if($mergedRules->isValid()) { ...

我收到以下错误:

调用数组上的成员函数 isValid()


我也试过这个,但也没有用:

if($post->isValid($mergedRules)) { ...

我收到以下错误:

array_key_exists():第一个参数应该是字符串或整数


关于如何实施合并规则集的任何建议?

4

2 回答 2

1

从我所看到的 -mergeRulesets()返回一组规则。

因此,如果您这样做 - 它可能会起作用:

$post = new Post(Input::all());
$post->setRules($post->mergeRulesets('set_up_all', 'set_up_property_room', 'set_up_property'));
if($post->isValid()) { 
     ///
}
于 2015-02-20T10:08:59.753 回答
1

我已经发布了 Laravel 4.2 ( 0.10.7) 包的更新版本,它现在允许您将规则传递给isValid()方法以针对它们进行验证。

$post->isValid($mergedRules);

其他答案将起作用,但这种语法更好(并且不会覆盖模型上的现有规则)。

于 2015-02-22T05:25:25.160 回答