zend rest route弄乱了默认控制器的路由

时间:2012-03-02 19:28:26

标签: zend-framework zend-route zend-rest zend-rest-route

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

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 rest路由,则路由问题就会消失。只要我提到其余请求必须路由到哪个控制器就不应该是一个问题吧。但这会影响默认的控制器路由。

1 个答案:

答案 0 :(得分: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的默认控制器目录,则可以省略路径中的模块选项。

以下是整个网址方法,请注意重置选项的注释。

/**
     * 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);
    }