查看此网站www.fltdata.com。出于某种原因,无论您进入哪个页面而不是指向主页,主页链接都指向当前页面。它在我的localhost上工作正常但在线它的行为就像这样。主链接的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时都会被调用。这可能是问题 - 但它在我的本地主机上工作正常而不在线 - 所以必须是某种配置问题 - 我应该在哪里看?
答案 0 :(得分:15)
如果不了解有关ZF设置和e.h的更多详细信息,很难说出这里出了什么问题。网址重写设置。 Zend_Controller_Request_Http::getBaseUrl()
背后的逻辑 - 如果在前端控制器中没有明确设置Zend_View_Helper_BaseUrl::baseUrl()
,那么你的baseUrl
调用就会被解决 - 这是非常复杂的并涉及4个不同的服务器变量(和在确定当前请求URI的过程中还有一些。)
解决此问题的最简单方法可能是在引导程序中的前端控制器上设置baseUrl
(相对于服务器根目录)。如果你正在使用新的Zend_Application
- bootstrapping,你只需要添加
resources.frontController.baseUrl = "/subdir"
到你的配置。
修改强>
您的帮助程序或多或少类似于ZF随附的原始baseUrl
- 帮助程序。原始的也代理Zend_Controller_Front::getBaseUrl()
。你使用哪个版本的ZF?您有没有理由不使用随附的baseUrl
- 帮助器?
您是否尝试明确设置引导中的baseUrl
?
答案 1 :(得分:6)
我通常使用配置对象作为基本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]
baseHttp = "http://whatever.net"
这种方式如果我需要在开发中使用不同的基本URL我可以为baseHttp个人添加一个不同的变量我认为如果你想让baseurl不被弄错,那么它比在自己的类中包装更简单。有时OOP太多OOP。此外,它还可以使安装程序更易于管理。你甚至可以获得$ _SERVER变量来获取主机名并用http://
包装它答案 2 :(得分:4)
Zend Framework总是返回当前页面,因为在调用 $ this-> baseUrl(); 之后您没有使用尾部斜杠。
要解决此问题,请在视图中调用 $ this-> 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>
答案 3 :(得分:2)
我在视图中使用$ this-&gt; baseUrl时遇到了类似的问题。我发现使用它会给我当前页面的网址:
的baseUrl; ?&gt;“中&GT; http://www.yourwebaddress.com/current-page
这将为我提供真正的基础,无论当前页面如何(注意斜杠添加到网址的末尾)
的baseUrl; ?&GT; /“&GT; http://www.yourwebaddress.com/