我有验证数据的自定义验证。自定义验证没有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。
答案 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!');
}
}]
]);
}