【问题标题】:zend rest route messing up routing for default controllerzend rest route 弄乱了默认控制器的路由
【发布时间】:2012-03-02 19:28:26
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    这似乎是一个常见问题,通常通过以下方式解决:

    $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 方法,请注意重置选项的 cmets。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 2021-10-25
      • 2014-05-04
      • 1970-01-01
      • 2014-09-20
      • 2018-12-30
      • 1970-01-01
      相关资源
      最近更新 更多