2013-02-14 124 views
5

我想从URL捕获通配符,然后首先将它传递给过滤器,然后路由到控制器。我不确定如何完全确定问题,但这是我迄今为止所尝试的。Laravel,路由通配符筛选,然后控制器

Route::get('test/(:any?)', array('as' => 'testroute', 'uses' => '[email protected]', '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' => '[email protected]')); 

基本上,我想检查是否有附加到URL的ID和设置cookie,如果有一个。但不管情况如何,我希望这个路由由控制器处理,不管是否有任何id。

我必须用这么多路线做同样的事情,所以我宁愿像过滤器一样而不是修改控制器的代码。

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

我可以通过过滤器吗?或者我不需要修改控制器代码的其他方式?

回答

0

尝试后传递一个匿名权之前

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

here

+0

@Gufran我已更新我的代码 – afarazit 2013-02-14 20:27:26

+0

不可以,匿名函数不会执行任何操作。它只是应用过滤器,然后将路线转发给控制器。另外,我需要获取通配符在过滤器或匿名关闭中的值。 – Gufran 2013-02-14 20:32:22

+0

@Gufran再次更新了代码,将匹配传递给anon函数,看看它是否正常工作 – afarazit 2013-02-14 20:34:52

0

摘自我会使用(用于较老版本的Laravel或过滤器)中间件http://laravel.com/docs/5.1/middleware,并添加路由/秒为一组它有中间件,你可以在这里看到http://laravel.com/docs/5.1/routing#route-group-middleware

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

+0

谢谢。非常感谢,但这个问题是2.5岁。它通常显示问题下的发布日期,因此请尝试下次检查日期。 – Gufran 2015-08-07 15:46:07