Zend Framework:view baseUrl()返回一个空字符串,而controler的getRequest() - > getBaseUrl()工作正常

时间:2012-05-31 19:14:29

标签: php zend-framework model-view-controller view-helpers

我正在使用Zend Framework进行MVC应用程序。

当我在视图中需要基本Url时,它总是返回""(空字符串);在我的控制器中,如果我使用$this->getRequest()->getBaseUrl(),它将返回正确的基本URL。

在示例中,我通过index.dev.php使用开发应用程序环境(生产是index.php);在制作中,我希望我的所有网址都以""作为baseUrl开头,但在开发环境中,使用index.dev.php,我希望我的所有网址都以"/index.dev.php"开头。

正如我之前所说,即使在开发环境中,视图的baseUrl()助手也会返回一个空字符串。但是在同一环境中使用$this->getRequest()->getBaseUrl(),会返回正确的基本URL。

为了解决这个问题,我将所有视图的$this->baseUrl()调用更改为$this->baseUrl,并在自定义基本控制器类中定义了此视图变量。但这不是我期望的解决方案。

这是一个模块化应用程序,我正在使用路由,在Bootstrap时间添加如下:

protected function _initRoutes(){

    $objFrontController = Zend_Controller_Front::getInstance();
    $objRouter = $objFrontController->getRouter();

    $arrAppRoutes = Service_Route::getAllActiveApplicationRoutes();

    if( is_array($arrAppRoutes) && count($arrAppRoutes) > 0 ){

        $objRouter->addRoutes($arrAppRoutes);

        // Add the default routes in the end
        $objRouter->addDefaultRoutes();
    }
}

这些路由都是Zend_Controller_Router_Route类的实例,当我在视图中使用它们时$this->url(array(), 'admin_dashboard');baseUrl总是正确的(甚至在使用{{1}之前查看var解决方案)。

如果有人知道这件事,请帮忙。如果您需要有关我的应用程序设置的更多信息,我会尽可能多地提供它。

修改

实际上,似乎存在一个问题:空字符串baseUrl在视图中工作正常,包括JS和CSS脚本;但有时候我需要使用Ajax,并且Base URL应该有baseUrl部分,以保持应用程序环境。我不知道这最后一部分应该是在同一个问题中,还是在一个新问题中。

1 个答案:

答案 0 :(得分:0)

由于视图中的baseUrl会删除脚本名称,因此附加$_SERVER['SCRIPT_NAME']应修复它。