【问题标题】:Laravel - Can I re-use validator instance in the controller?Laravel - 我可以在控制器中重用验证器实例吗?
【发布时间】:2016-12-05 21:25:31
【问题描述】:

我使用 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 文档,似乎所有示例都假设单个验证列表

【问题讨论】:

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


    【解决方案1】:

    听起来您想使用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()));
    }
    

    【讨论】:

    • thanx,我不知道为什么文档中没有提到 mergRules!
    • @max 是的,我已经习惯了。隐藏的功能太多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 2015-01-08
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多