【问题标题】:Laravel, Routing Wildcards to filter and then controllerLaravel,路由通配符过滤然后控制器
【发布时间】: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,我都希望该路由由控制器处理。

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

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

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

【问题讨论】:

    标签: filter controller wildcard laravel routes


    【解决方案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 年历史。它通常会在问题下方显示发布日期,因此下次尝试检查日期。
    猜你喜欢
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2013-05-19
    • 2013-05-21
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2017-07-17
    相关资源
    最近更新 更多