Как добавить пользовательское правило проверки в Laravel? - PullRequest
0 голосов
/ 06 июня 2019

Я хотел бы добавить пользовательские правила проверки на моем контроллере 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() очищает сообщения об ошибках, и добавление ошибки не приведет к сбою проверки.

Как правильно достичь этого?

1 Ответ

0 голосов
/ 06 июня 2019

Тогда вы можете использовать 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...