Я хотел бы добавить пользовательские правила проверки в свой контроллер 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() очищает сообщения об ошибках, и добавление ошибки не приведет к сбою проверки.
Каков правильный способ добиться этого?
Ну а как тогда применять это правило. Правило не знает id ресурса, и правило не применяется ни к одному значению в request...
Я считаю, что вы используете неправильный подход. Потому что вы можете использовать существует в валидаторе, чтобы убедиться, что ресурс существует, но тогда вам нужно использовать политика, который авторизует пользователя для использования ресурса.
@nakov, Да, я могу использовать существующие, но у меня нет $id моего ресурса, поэтому я не могу проверить, существует ли он :(






Тогда вы можете использовать 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
}
}