首页 > 解决方案 > 如何在 Laravel 中添加自定义验证规则?

问题描述

我想在我的 Laravel 控制器上添加自定义验证规则:

所以我写了这个:

public function update($id, Request $request) {
    $validator = Validator::make($request->all(), [
        'name' => 'required|unique:stock.containers|max:255'
    ]);

    $container = Container::find($id);

    if(!$container)
    {
        $validator->errors()->add('id', 'Not a valid resource');
    }

    if($container->owner_id != user_id())
    {
        $validator->errors()->add('owner_id', 'Not owner of this resource');
    }

    if ($validator->fails()) {
        return response()->json($validator->errors(), 422);  //i'm not getting any
    }
}

不幸的是,$validator->errors()甚至$validator->addMessageBag()不起作用。我注意到$validator->fails()清除错误消息并添加错误不会使验证失败。

实现这一目标的正确方法是什么?

标签: phplaravelvalidation

解决方案


然后你可以使用after

public function update($id, Request $request) {
    $validator = Validator::make($request->all(), [
        'name' => 'required|unique:stock.containers|max:255'
    ]);

    $validator->after(function($validator) use($id) {
        $container = Container::find($id);

        if(!$container)
        {
            $validator->errors()->add('id', 'Not a valid resource');
        }

        if($container->owner_id != user_id())
        {
            $validator->errors()->add('owner_id', 'Not owner of this resource');
        }
    });

    if ($validator->fails()) {
        return response()->json($validator->errors(), 422);  //i'm not getting any
    }
}

推荐阅读