1

我正在将 Zend Framework 用于 MVC 应用程序。

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

例如,我通过index.dev.php(生产是index.php)使用开发应用环境;在生产""环境中,我希望我所有的 URL 都以 baseUrl 开头,但在开发环境中,使用 index.dev.php,我希望我所有的 URL 都以"/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总是正确的(甚至在使用baseUrlview var 解决方案之前)。

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

编辑

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

4

1 回答 1

0

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

于 2012-05-31T20:27:27.963 回答