【问题标题】:Laravel middleware not attaching to some requestsLaravel 中间件未附加到某些请求
【发布时间】:2020-11-05 11:58:58
【问题描述】:

我目前在中间件方面有点问题。

我正在使用 JSON API 包,我正在尝试从标头中传递一些数据并将其与请求合并。

这似乎在一个路由上工作得非常好,但在下一个路由上似乎请求完全是空的,尽管它是在相同的路由方法中定义的。

这是我的路由定义文件:

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 并执行dd(request()->all()) 我可以看到合并的内容,但是如果我转到/categories/1 我看到dd(request()->all()) 是一个空数组。

这是处理这种想法的正确方法,与请求合并还是我应该执行以下操作:

app()->instance(Tenant::class, $tenant)

编辑:执行上述操作并执行租户实例也不起作用,并且租户为空,但是在中间件内部执行 dd($tenant) 我可以看到它已解决...

【问题讨论】:

    标签: laravel request middleware


    【解决方案1】:

    中间件正在调度 find 并且一切都在运行 - 这与放入中间件的顺序有关。不幸的是,该包不允许您编辑中间件的顺序。

    为了解决这个问题,我创建了一个在RouteServiceProvider 内部有中间件的路由,并创建了一个名为public.php 的新文件,我在其中存储路由,因为该文件中的所有路由无论如何都需要中间件。

    这并不理想,但现在可以解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-25
      • 2021-03-14
      • 2015-07-17
      • 2018-05-15
      • 2014-10-29
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多