Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel 4中,合并规则集是如何实现的?_Php_Validation_Laravel_Package_Validationrules - Fatal编程技术网

Php 在Laravel 4中,合并规则集是如何实现的?

Php 在Laravel 4中,合并规则集是如何实现的?,php,validation,laravel,package,validationrules,Php,Validation,Laravel,Package,Validationrules,我正在使用包在模型中创建验证规则 我特别喜欢您可以为不同路线创建的自定义规则集 型号 protected $rulesets = [ 'set_up_all' => [ 'headline' => 'required|max:100', 'description' => 'required' ], 'set_up_property' => [ 'pets

我正在使用包在模型中创建验证规则

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

型号

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';
}
在上面的示例中,它可以很好地根据设置\u all规则集进行验证。现在,我想结合几个规则集,并对它们进行验证

根据文档,该软件包提供了一种解决问题的方法。我只是不知道如何将提供的示例集成到我当前的流程中

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

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

这是我的尝试,但没有成功:

if($mergedRules->isValid()) { ...
我得到以下错误:

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


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

if($post->isValid($mergedRules)) { ...
我得到以下错误:

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



关于如何实现合并规则集有什么建议吗?

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

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

$post = new Post(Input::all());
$post->setRules($post->mergeRulesets('set_up_all', 'set_up_property_room', 'set_up_property'));
if($post->isValid()) { 
     ///
}

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

$post->isValid($mergedRules);

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

我相信该方法的名称是
mergeRules()
,而不是
mergeRulesets()
当我尝试mergeRules()时,会出现以下错误:“调用未定义的方法\Database\Query\Builder::mergeRules()”。你为什么认为是这样?