2010-08-19 34 views
2

在zend框架中,無論如何,我可以檢查代碼中是否存在路由?Zend Framework:檢查路由是否存在於代碼

例如

說下列路線/網址是有效的(點提供給控制器/動作)

/users 
/users/1 // /users?id=1 
/users/page/1 /users?page=1 
/users/tagged/tagname/page/1 /users?tagged=1&page=1 

如果用戶試圖轉到/users/nonexistantpage它應該失敗。這樣可以檢查用戶是否請求url,是否會失敗,但在代碼級別。

回答

3

我相信你正在尋找Zend路由器的match()方法。看看是否有幫助。

+0

這種方法是從'Zend_Controller_Router_Route'當我做'在Zend_Controller_Front ::的getInstance() - > getRouter()'我得到'Zend_Controller_Router_Rewrite'我怎樣才能得到一個途徑,我需要循環儘管所有路線? – 2011-01-02 07:41:18

+0

無論如何,我嘗試做http://pastie.org/1422932,但我發現像'/ projects/adashds'這樣的URI是有效的匹配路由http://pastie.org/1422935。顯然'adashdsAction'不存在 – 2011-01-02 08:42:46

1

如果使用rewrite路由器(Zend_Controller_Router_Rewrite和),它有一個方法hasRoute($ ROUTE_NAME)

然後,如果你想檢查路線在您的應用程序anywere存在,你可以檢查它這樣的:

Zend_Controller_Front :: getInstance() - > getRouter() - > hasRoute(「my_route」);

0

它有點老問題,但我想這是你在找什麼:

foreach(Zend_Controller_Front::getInstance()->getRouter()->getRoutes() as $route) 
{ 
    $route->match($uri); 
} 
0

對於使用Zend Framework 2的,這是非常簡單的。

假設我們要檢查URI是否與註冊路由器相匹配,並重定向用戶,如果這與當前url不同。

$goto = 'http://www.mysite.tld/admin'; 

$request = $this->getRequest(); 
$request->setUri($goto); 

if ($routeToBeMatched = $this->getServiceLocator()->get('Router')->match($request)) { 
    $currentRouteMatchName = $this->getEvent()->getRouteMatch()->getMatchedRouteName(); 
    if ($routeToBeMatched->getMatchedRouteName() != $currentRouteMatchName) { 
     return $this->redirect()->toRoute($goto); 
    } 
}