2014-02-19 70 views
1

我是新來的Zend 2,我一開始先用laravel和我需要的東西做的,我知道Laravel的路由過濾可以解決,但我使用Zend 2.Zend的2當量Laravel 4的路由過濾

Laravel Route Filter

我檢查了Zend 2的文檔,我似乎無法找到它。

我只需要在選定的路線上做一些日誌記錄和材料,我不想在每條路線的每個動作上添加該代碼,因爲我在這裏有超過50條不同的路線,但是在laravel中,我可以利用路線過濾,以便在選定的路線中,它將在去往該路線之前先進入過濾器。

在laravel的路線:

Route::get('route1',array('before'=>'generic','uses'=>'[email protected]')); 
Route::get('route2',array('before'=>'generic','uses'=>'[email protected]')); 
Route::filter('generic', 'RouteFilter'); 
+0

你見過zend的路線匹配嗎? – 2014-02-19 11:52:44

+0

http://www.masterzendframework.com/tutorial/use-zend-framework-2-routematch-for-dynamic-routing – cptnk

回答

1
我以前沒有使用過Laravel

,但我也跟着鏈接,我很害怕地說,

不,它不存在

你將不得不使用控制器:

public function somethingAction() 
{ 
    if (!condition true) { 
     return $this->notFoundAction(); 
     // or return $this->redirect()->toRoute('MyRoute'); 
    } 

    // Route is filtered 
} 

,您還可以將回調到MvcEvent::EVENT_ROUTE事件:

public function(MvcEvent $e) 
{ 
    $e->getApplication()->getEventManager()->attach(MvcEvent::EVENT_ROUTE, function(EventInterface $e) { 
     // check the route and do whatever you like 
     $matchedRouteName = $event->getRouteMatch()->getMatchedRouteName(); 
     if ($matchedRouteName = 'admin') {// or whatever you want to check 
      // check if user is admin 
     } 
    }); 
} 

不僅MvcEvent::EVENT_ROUTE,有很多事件的觸發,例如MvcEvent::EVENT_DISPATCH。你只需要附加一個回調函數! 對於所有Mvc活動的完整列表,查看this鏈接!

+5

我明白了,所以你的意思是說除了全部添加過濾器之外別無他法控制器?關於你的第二個建議,我認爲這是我需要的,我在哪裏放置代碼?你能舉一個如何檢查路線的例子嗎? –