Laravel,路由通配符过滤然后控制器

Posted

技术标签:

【中文标题】Laravel,路由通配符过滤然后控制器【英文标题】:Laravel, Routing Wildcards to filter and then controller 【发布时间】:2013-01-30 17:40:31 【问题描述】:

我正在尝试从 URL 捕获通配符,然后首先将其传递给过滤器,然后路由到控制器。我不确定如何准确地绘制问题,但这是我迄今为止尝试过的。

Route::get('test/(:any?)', array('as' => 'testroute', 'uses' => 'test@result', 'before' => "test_filter:$1"));

Route::filter('test_filter', function($id = NULL)

    if($id)
    echo "This id is " . $id;    // Prints "This id is $1"
);

Route::get('test/(:any?)', array('as' => 'testroute', function($id = NULL)

    if($id)
        echo "this id is " . $id;    // Does not do anything
, 'uses' => 'test@result'));

基本上,我想检查是否有附加到 URL 的 id 并设置一个 cookie,如果有的话。但不管是哪种情况,无论是否附加任何 id,我都希望该路由由控制器处理。

我必须对这么多路由做同样的事情,所以我更喜欢过滤器之类的东西,而不是修改控制器的代码。

我知道我可以直接将通配符元素传递给闭包,或者我可以将它作为参数提供给任何控制器,但在这种情况下,我必须修改控制器代码,目前我不能.

我可以通过过滤器做到这一点吗?或任何其他我不必修改控制器代码的方式?

【问题讨论】:

【参考方案1】:

尝试在之前传递匿名

Route::get('test/(:any?)',
    array(
       'as' => 'testroute',
       'uses' => 'test@result',
       'before' => "test_filter",
       function($my_cookie_value)
       
          // Set cookie here
       
    )
 );

取自here

【讨论】:

不,匿名函数不做任何事情。它只是应用过滤器,然后将路由转发到控制器。另外,我需要在过滤器或匿名闭包中获取通配符的值。 @Gufran 再次更新了代码,将匹配传递给 anon 函数,看看是否有效 不,它不做任何事情。看起来匿名函数只是被忽略了。顺便说一句,我已经阅读了 Laravel 文档的所有文档,显然这是不可能的。【参考方案2】:

我会使用中间件 http://laravel.com/docs/5.1/middleware(或过滤旧 Laravel 版本)并将 route/s 添加到具有中间件的组中,如您在此处看到的 http://laravel.com/docs/5.1/routing#route-group-middleware。

中间件将在路由代码之前执行,您可以在其中添加逻辑来管理您的 cookie。

【讨论】:

谢谢。非常感谢,但这个问题已有 2.5 年历史。它通常会在问题下方显示发布日期,因此下次尝试检查日期。

以上是关于Laravel,路由通配符过滤然后控制器的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 5 中通配符到错误控制器的路由

Laravel 5.6 通配符路由在域中未按预期运行

Laravel Pipeline 组件的实现

Laravel 4 过滤不同角色的组路由

Laravel 5:API 路由 + 通配符路由导致意外行为

laravel 从控制器调用路由