2013-02-14 105 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