2014-03-29 163 views
0

我想在自己的網站來看中url這些url模式:Laravel路由和過濾器

  • http://domain.com/specialization/eye
  • http://domain.com/clinic-dr-house
  • http://domain.com/faq

第一url有一個簡單的路由模式:

Route::get('/specialization/{slug}', '[email protected]'); 

第二和第三url指的是兩個不同的控制器操作:

我嘗試用此過濾器:

Route::filter('/{slug}',function() 
{ 
    if(Clinic::where('slug',$slug)->count() == 1) 
     Route::get('/{slug}','[email protected]'); 

    if(Page::where('slug',$slug)->count() == 1) 
     Route::get('/{slug}','[email protected]'); 
}); 

我有一個例外...... th是不是一個痛苦的方法?

回答

1

要聲明你應該使用的過濾器的靜態名稱的過濾器,例如:

Route::filter('filtername',function() 
{ 
    // ... 
}); 

然後你可以使用此過濾器在你的路由這樣的方式:

Route::get('/specialization/{slug}', array('before' => 'filtername', 'uses' => '[email protected]')); 

所以,當您使用http://domain.com/specialization/eye附加到此路由的過濾器將在路由分派之前執行。閱讀更多關於documentation

更新:對於第二和第三條路線,您可以檢查w過濾器中的路徑參數,並根據參數做不同的事情。此外,您還可以使用一個方法對於這兩個網址,在技術上這兩個URL是相同的一個路由,這樣使用一個途徑,並根據帕拉姆,做不同的事情,比如你有以下url S:

http://domain.com/clinic-dr-house 
http://domain.com/faq 

使用兩個網址單一路線,例如,使用:

Route::get('/{param}', '[email protected]'); 

FrontController這樣創建common方法:

public function common($param) 
{ 
    // Check the param, if param is clinic-dr-house 
    // the do something or do something else for faq 
    // or you may use redirect as well 
} 
+0

好,但ÿ我們的答案沒有迴應我的問題:最後兩個網址,我如何管理我的情況的差異? –

+0

對於相同的路由簽名,您不需要兩種不同的方法,而是可以在單個路由中捕獲所有(相同)路由,並從該方法執行不同的操作。 –

+1

好吧,我認爲有一種方法可以將這種做法應用於路線和/或使用過濾器。 我來自Codeigniter,當我在CI中使用一個「選擇器」功能,可以識別SLUG並調用正確的控制器方法;所以我想我會和Laravel一樣。 非常感謝! –