Laravel - 我可以在控制器中重用验证器实例吗?

时间:2016-07-31 20:08:37

标签: php validation laravel laravel-5 laravel-5.2

我使用AJAX发送请求,我想以特殊方式格式化错误(尽管仍然是JSON。我想更改错误的数据结构并为其添加一些标记)

所以,显然$this->validate显然会在未经我许可的情况下打印错误!我无法控制它,我必须使用验证器的静态方法

$whitelist = [
    'title'=>'required',
    'slug'=>'present' ,
    'text'=>'present'
];

$validation = Validator::make($request->all(), $whitelist);
if($validation->fails())
{
    format_output_likeIwant($validation->messages()->messages());
}

$another_whitelist = [
    'some_other_info'=>'required',
];

出于好奇,有没有办法让我用现有的实例验证我的$another_whitelist?或者我应该为每个列表创建一个新的验证器实例吗?

顺便说一下,有2个不同验证数组的原因是,我使用这个白名单/数组在数据库中保存/更新之前填充我的模型实例,并避免在大表的情况下编写大量额外代码。这里的2个列表属于不同的模型/表(see here for example

我查看了laravel文档,似乎所有示例都假定单个验证列表

1 个答案:

答案 0 :(得分:4)

听起来您想使用Validator::after()Validator::mergeRules()。试试吧:

public function index(Request $request)
{
    $mainRules = [
        'title'=>'required',
        'slug'=>'present' ,
        'text'=>'present'
    ];

    /** @var \Illuminate\Validation\Validator $validation */
    $validation = Validator::make($request->all(), $mainRules);

    if ($validation->fails()) {
        //do something
    }

    $additionalRules = [
        'author' => 'required'
    ];
    $validation->mergeRules($additionalRules);

    # validates $mainRules and $additionalRules together...
    dump(($validation->fails()));
}