2010-08-19 32 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); 
    } 
}