5

我正在尝试从 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'));

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

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

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

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

4

2 回答 2

0

尝试在之前传递匿名

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

取自这里

于 2013-02-14T20:19:34.457 回答
0

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

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

于 2015-08-07T11:27:59.387 回答