2012-03-02 180 views
0

我通过扩展Zend_Rest_Controller实现了一个RESTful服务。该服务很好。我只有一个实际上具有RESTful行为的控制器。所以我在bootstrap中添加了该控制器的其余路由。zend休息路由搞乱了默认控制器的路由

protected function _initRestRoute() 
{ 
    $this->bootstrap('frontController'); 
    $frontController = Zend_Controller_Front::getInstance(); 
    $restRoute = new Zend_Rest_Route($frontController, array() , array('default' =>  array('MyserviceController'))); 
    $frontController->getRouter()->addRoute('rest', $restRoute); 

} 

问题在我运行我的门户网站zend应用程序时开始。当我构建URL时,索引控制器布局中的链接错过了action参数。例如,网络控制器中操作主页的索引布局上的链接如下所示。

$this->url(array('controller'=>'network','action'=>'homepage','module'=>'default')); 

这应该返回“localhost/projectname/public/network/homepage”而不是返回“localhost/projectname/public/network”。此行为仅在布局由默认控制器(即IndexController)加载时才会发生。如果我从引导中删除zend休息路由,路由问题就会消失。只要我提到其他请求必须路由到哪个控制器,它不应该是个问题。但是这影响了默认的控制器路由。

回答

0

这似乎是一个常见的问题,通常喜欢的东西解决:

$this->url(array('controller'=>'network','action'=>'homepage','module'=>'default'), 'default'); 

或:

$this->url(array('controller'=>'network','action'=>'homepage','module'=>'default'), NULL, TRUE); 

可能会奏效。

如果您的'module'=>'default'/application/controllers的默认控制器目录,则可以省略路由中的模块选项。

以下是整个url方法记下重置选项的注释。

/** 
    * Generates an url given the name of a route. 
    * 
    * @access public 
    * 
    * @param array $urlOptions Options passed to the assemble method of the Route object. 
    * @param mixed $name The name of a Route to use. If null it will use the current Route 
    * @param bool $reset Whether or not to reset the route defaults with those provided 
    * @return string Url for the link href attribute. 
    */ 
    public function url(array $urlOptions = array(), $name = null, $reset = false, $encode = true) 
    { 
     $router = Zend_Controller_Front::getInstance()->getRouter(); 
     return $router->assemble($urlOptions, $name, $reset, $encode); 
    } 
+0

是的,这工作...非常感谢。 – biker46s 2012-03-05 15:24:06