#laravel #request #middleware
#laravel #запрос #промежуточное программное обеспечение
Вопрос:
В настоящее время у меня возникла небольшая проблема с промежуточным программным обеспечением.
Я использую пакет API JSON и пытаюсь передать некоторые данные из заголовка и объединить их с запросом.
Кажется, что это отлично работает на одном маршруте, но затем на следующем кажется, что запрос полностью пуст, хотя он определен в том же методе маршрута.
Вот мой файл определения маршрута:
JsonApi::register('default')->authorizer('default')->middleware('tenant.identifier')->routes(function (RouteRegistrar $api) {
$api->resource('categories')->readOnly();
});
У меня есть промежуточное программное обеспечение:
if (($sub = $request->header('X-Tenant-Identifier')) === null) {
return new Response('Tenant identifier is missing from the request', Response::HTTP_BAD_REQUEST);
}
if (($tenant = Tenant::query()->where('subdomain', $sub)->first()) === null) {
return new Response('Invalid tenant identifier', Response::HTTP_BAD_REQUEST);
}
$request->merge([
'tenant' => $tenant,
'requiresTenant' => true
]);
return $next($request);
Если я перейду /categories
и сделаю a dd(request()->all())
, я увижу, что содержимое объединено, однако, если я перейду /categories/1
, я увижу, что dd(request()->all())
это пустой массив.
Правильно ли это подходить к такой идее, объединяясь с запросом, или я должен сделать что-то вроде следующего:
app()->instance(Tenant::class, $tenant)
РЕДАКТИРОВАТЬ: выполнение вышеуказанного и создание экземпляра Tenant также не работает, и tenant пуст, однако выполнение dd ($tenant) внутри промежуточного программного обеспечения, которое я вижу, разрешилось…
Ответ №1:
Промежуточное программное обеспечение отправляло find, и все запускалось — это было связано с порядком, в который вводится промежуточное программное обеспечение. К сожалению, пакет не позволяет редактировать порядок промежуточного программного обеспечения.
Чтобы исправить это, я создал маршрут, внутри которого было промежуточное RouteServiceProvider
программное обеспечение, и создал новый файл с именем public.php
, в котором я храню маршруты, поскольку все маршруты внутри этого файла в любом случае будут нуждаться в промежуточном программном обеспечении.
Это не идеально, но пока это исправление.