Промежуточное программное обеспечение Laravel не подключается к некоторым запросам

#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 , в котором я храню маршруты, поскольку все маршруты внутри этого файла в любом случае будут нуждаться в промежуточном программном обеспечении.

Это не идеально, но пока это исправление.