Доброго дня.
У меня есть сущность Аккаунта, к которой могут относиться разные другие сущности. Например, Пост. CRUD для Постов выглядит примерно так:
/accounts/{account}/posts/{post}
Соответственно, я проверяю в коде контроллера, принадлежит ли Пост переданному Аккаунту, или нет. Если нет, генерирую ошибку. Данный код повторяется из метода в метод, и я хочу вынести его в отдельное правило валидации.
Однако есть проблема: Laravel не предоставляет возможности валидировать параметры роутов. На StackOverflow рекомендуют перегружать метод all() объекта Request, что я и сделал, создав свой собственный класс App\Http\Request. Однако после этого отвалился DI-контейнер: он внедряет в методы контроллера мой собственный Request вместо нативного реквеста Лары, но без данных внутри. Собственно, код моего Request и контроллера под спойлером.
Код Request и контроллераnamespace App\Http;
use Illuminate\Http\Request as NativeRequest;
class Request extends NativeRequest
{
public function all($keys = null)
{
$results = parent::all($keys);
// тут бы еще подмешивал route->parameters
return $results;
}
}
Пытаюсь внедрить собственный Request, но он пуст.
use App\Http\Request;
class PostsController extends Controller
{
public function update(Request $request, int $accountId, int $postId)
{
return $request->all(); // пусто, при этом POST есть. все работает, если вернуть нативный реквест
}
}
Как быть? Вопросов два, в зависимости от реализуемости каждого из них.
1. Каков best way для валидации параметров роута, если очень нужно?
2. Как заменить нативный Illuminate\Http\Request на свой App\Http\Request так, чтобы внедрение данного класса происходило корректно?