Php Zend Framework$this->;baseUrl()始终返回当前页面:(为什么

Php Zend Framework$this->;baseUrl()始终返回当前页面:(为什么,php,zend-framework,Php,Zend Framework,请访问此网站www.fltdata.com。出于某种原因,无论您进入哪个页面,主页链接都会指向当前页面,而不是指向主页。它在我的本地主机上运行正常,但在联机状态下的行为是这样的。主页链接的href值仅为:$this->baseUrl() 这里怎么了 ==编辑=== 我创建了一个助手,如下所示: class Zend_View_Helper_BaseUrl { protected $_baseUrl; function __construct() { $f

请访问此网站www.fltdata.com。出于某种原因,无论您进入哪个页面,主页链接都会指向当前页面,而不是指向主页。它在我的本地主机上运行正常,但在联机状态下的行为是这样的。主页链接的href值仅为:$this->baseUrl()

这里怎么了

==编辑===

我创建了一个助手,如下所示:

class Zend_View_Helper_BaseUrl
{
    protected $_baseUrl;

    function __construct()
    {
        $fc = Zend_Controller_Front::getInstance();
        $this->_baseUrl =  $fc->getBaseUrl();
    }

    function baseUrl()
    {
        return $this->_baseUrl;
    }
}

我猜这就是每当我调用$this->baseUrl时调用的内容。这可能是问题所在吗?不管它在我的本地主机中工作正常,但不在线,所以一定是某种配置问题-我应该在哪里查找?

如果不了解有关ZF设置和e.h.url-rewriting-s的更多详细信息,很难判断出这里出了什么问题设置。
Zend\u Controller\u Request\u Http::getBaseUrl()
-这是您调用
Zend\u View\u Helper\u BaseUrl::BaseUrl()
的地方,如果前面的控制器中没有显式设置
BaseUrl
,则将代理该逻辑-非常复杂,并且涉及4个不同的服务器变量(在确定当前请求URI的过程中还有一些)

克服此问题的最简单方法可能是在引导程序的前端控制器上设置
baseUrl
(相对于服务器根目录)。如果您使用的是新的
Zend_应用程序
-引导程序,您只需添加

resources.frontController.baseUrl = "/subdir"
您的配置

编辑

您的帮助程序或多或少类似于ZF附带的原始
baseUrl
-helper。原始帮助程序还代理
Zend\u Controller\u Front::getBaseUrl()
。您使用的是哪个版本的ZF?您为什么不使用附带的
baseUrl
-helper


您是否尝试在引导过程中显式设置
baseUrl

我通常使用配置对象作为基本url,然后在index.php中定义它 在public/index.php中

    $config = new Zend_Config_Ini(
        APPLICATION_PATH . '/configs/application.ini', APPLICATION_ENV);
    $baseUrl = $config->baseHttp;
    define('BASE_URL', $baseUrl);`
在configs/application.ini中,我在production部分中有这个

[production]
baseHttp                            = "http://whatever.net"

这样,如果我在开发中需要使用不同的基本url,我可以为baseHttp添加一个不同的变量。我个人认为,如果你希望baseurl不会变得复杂,这是一种比在自己的类中包装更简单的方法。有时OOP太过OOP。另外,它会使安装程序更易于管理。你可以uld甚至可以获取$\u服务器变量来获取主机名,并用http://

将其包装。在我的视图中使用$this->baseUrl时,我遇到了类似的问题。我发现使用此变量可以获得当前页面的url:

baseUrl;?>“>

不管当前页面如何,这都会给出真正的baseurl(注意url末尾添加的斜杠)

baseUrl;?>/“>

Zend Framework总是返回当前页面,因为在调用$this->baseUrl()之后没有使用尾随斜杠

要解决此问题,请在您的视图中调用$this->baseUrl();之后添加一个尾随斜杠,如下所示:


正确的方法




省略尾随斜杠将生成指向当前查看页面的链接

错误的方法



Zend上有很多我不知道的地方:(-我发布了我的帮助函数-有什么问题吗?事实上,我只是在遵循一个教程,然后网站就这样建立起来了-我认为我根本没有在我的引导文件中设置baseUrl。你在哪里尝试过显式设置baseUrl?结果如何?你尝试过使用附带的baseUrl帮助程序吗?结果如何?这是他为我工作:
<a href="<?php echo $this->baseUrl() . "/"; ?>">Home Link</a>
<a href="<?php echo $this->baseUrl(); ?>/">Home Link</a>
<a href="<?php echo $this->baseUrl(); ?>">Home Link</a>