【问题标题】:Laravel exclude route in nested Middleware groupLaravel 排除嵌套中间件组中的路由
【发布时间】:2016-08-09 14:34:14
【问题描述】:

我(大致上)有以下情况:

MiddlewareGroup1{

    MiddlewareGroup2{

        Route::resource(...);
        ...
        Route::post('some-ajax-request', 'SomeController@action');

    }

    OtherNestedMiddlewareGroups{
        ...
    }

}

我有一个问题,我希望 MiddlewareGroup2 申请 ajax 路由,而不是 MiddlewareGroup1。如何使 MiddlewareGroup1 不适用,但保留 MiddlewareGroup2?

【问题讨论】:

  • 您不想在 MiddlewareGroup1 之外创建另一个 MiddlewareGroup2 吗?
  • @rap-2-h 而不是,它适用于具有大量路由的大型应用程序,我宁愿不定义多个相同的组以在路由文件中保持良好的结构化概述,如果这有意义
  • 好的,我明白了,但是如果不适用,IMO 将 MiddlewareGroup2 从 MiddlewareGroup1 中取出来更有意义。无论如何,这只是一个意见!
  • @rap-2-h middlewaregroup1 确保所有用户请求都被记录并保存在数据库中。中间件 2 是管理路由。我希望 ajax 请求不被记录为数据库中的“用户调用路由”,但该请求只能由管理员用户触发,情况就是这样

标签: php laravel middleware


【解决方案1】:

我猜这里没有内置解决方案。您可以将此路由放在MiddlewareGroup1 之外,也可以在MiddlewareGroup1 中查看当前请求的 url,例如:

....
if ($request->is('some-ajax-request')) {
    return $next($request);
}
....

这将跳过已定义 URL 的 MiddlewareGroup1 中间件。

如果您有许多类似的 ajax 路由,您可以为它们使用类似的 URL('ajax-add-stuff'、'ajax-do-some-stuff' 等)并像这样检查它们:

if ($request->is('ajax*')) { .... }

【讨论】:

  • 好答案,谢谢!另外,为了排除更多路由,我将在中间件中定义一个包含排除路由的数组,并使用 foreach+ifelse 来检查它是否有效。
猜你喜欢
  • 2015-08-01
  • 2016-08-27
  • 1970-01-01
  • 2015-11-17
  • 2017-02-16
  • 2016-06-20
  • 2015-04-27
  • 2020-09-04
  • 2016-12-09
相关资源
最近更新 更多