如何一起使用自定义和默认验证?

时间:2018-04-08 16:01:49

标签: php laravel laravel-5

我有验证数据的自定义验证。自定义验证没有unique规则,因为我需要在更新时忽略此规则,因此我在unique方法上使用store()规则。但是这被忽略了,只有在我使用默认验证更改自定义验证时才会有效。

如果我有以下内容,它会起作用:

public function store(Request $request)
    {
        if (!$this->user instanceof Employee) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        $request->validate([
            'name' => 'required|max:50|unique:centers'
        ]);

        $center = Center::create($request->all());
        return response()->json($center, 201);
    }   

但是,如果我将方法签名更改为以下内容,则不起作用:

public function store(CustomValidation $request)

我如何同时使用它们?我不想在方法中移动自定义验证代码,因为我必须为更新方法重复msyelf。

1 个答案:

答案 0 :(得分:0)

我认为它会对你有所帮助

use Illuminate\Contracts\Validation\Rule;

class CowbellValidationRule implements Rule
{
    public function passes($attribute, $value)
    {
        return $value > 10;
    }

    public function message()
    {
        return ':attribute needs more cowbell!';
    }
}

public function store()
{
    // Validation message would be "song needs more cowbell!"
    $this->validate(request(), [
        'song' => [new CowbellValidationRule]
    ]);
}

public function store()
{
    $this->validate(request(), [
        'song' => [function ($attribute, $value, $fail) {
            if ($value <= 10) {
                $fail(':attribute needs more cowbell!');
            }
        }]
    ]);
}