ознакомьтесь с этим сайтом www.fltdata.com. По какой-то причине домашняя ссылка независимо от того, на какой странице вы идете, а не на домашнюю страницу, указывает на текущую страницу. Он отлично работает на моем локальном хосте, но в режиме онлайн он ведет себя так. Значение href для домашней ссылки: $ this-> baseUrl ()
Что здесь не так.
=== EDIT ===
Ну, я создал помощника, который находится ниже:
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 и настройке URL-переписывания. Логика Zend_Controller_Request_Http::getBaseUrl()
– это то, где ваш вызов Zend_View_Helper_BaseUrl::baseUrl()
будет запрошен, если baseUrl
не установлен явно в фронт-контроллере – довольно сложный и включает в себя 4 разных переменных сервера (и еще несколько в процессе определения URI текущего запроса).
Проще всего решить эту проблему, возможно, было бы установить baseUrl
(относительно корня сервера) на фронт-контроллере в вашем бутстрапе. Если вы используете новый Zend_Application
-bootstrapping, вам просто нужно добавить
resources.frontController.baseUrl = "/subdir"
к вашей конфигурации.
РЕДАКТИРОВАТЬ
Ваш помощник более или менее похож на оригинальный baseUrl
-helper, поставляемый с ZF. Исходный также прокси- Zend_Controller_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] baseHttp = "http://whatever.net"
Таким образом, если мне когда-либо понадобится использовать другой базовый url в разработке, я мог бы просто добавить различную переменную для baseHttp лично, я думаю, если вы хотите, чтобы baseurl не был запутан, это более простой подход, чем обертывание в своем классе. Иногда ООП слишком много ООП. Кроме того, это упростило бы установку программы установки. Вы даже можете получить переменную $ _SERVER, чтобы получить имя хоста и обернуть ее с помощью http: //
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>
У меня была аналогичная проблема при использовании $ this-> baseUrl на мой взгляд. Я нашел, что использование этого даст мне URL-адрес текущей страницы:
BaseUrl; ?> "> http://www.yourwebaddress.com/current-page
и это даст мне реальный baseurl независимо от текущей страницы (обратите внимание, что слэш добавлен в конец URL-адреса)
BaseUrl; ?> / "> http://www.yourwebaddress.com/