Получение базового пути из представления в zend framework

Случай: вы разрабатываете сайт с помощью Zend Framework и вам нужны относительные ссылки на папку, в которой развернуто веб-приложение. mysite.com/folder онлайн и localhost:8080 в разработке.

Следующее хорошо работает в контроллерах независимо от развернутого местоположения:

$this->_helper->redirector->gotoSimple($action, $controller, $module, $params);

И следующее внутри скрипта просмотра, т.е. индекс.phtml:

<a href="<?php echo $this->url(array('controller'=>'index', 'action' => 'index'), null, true); ?>">

Но как мне получить правильный базовый путь при ссылке на изображения или таблицы стилей? (например, в файле layout.phtml):

<img src='<?php echo WHAT_TO_TYPE_HERE; ?>images/logo.png' />

а также

$this->headLink()->appendStylesheet( WHAT_TO_TYPE_HERE . 'css/default.css');

WHAT_TO_TYPE_HERE следует заменить чем-то, что дает

<img src="/folder/images/logo.png />` on mysite.com and `<img src="/images/logo.png />

на локальном хосте


person Mads Mobæk    schedule 11.03.2009    source источник


Ответы (5)


Вы можете получить базовый URL-адрес от Front Controller Zend_Controller_Front::getInstance()->getBaseUrl();. Я оборачиваю это в помощнике представления

class My_View_Helper_BaseUrl 
{   
    /**
     *  Get base url
     * 
     * @return string
     */
    public function baseUrl()
    {
        return rtrim(Zend_Controller_Front::getInstance()->getBaseUrl(),'/');
    }

}

Таким образом, в html-разметке у вас есть что-то вроде <img src="<?php echo $this->baseUrl();?>/images/logo.png"/>. Косая черта в конце удалена в помощнике, поэтому, когда приложение не запускается в подпапке (в этом случае baseUrl пуст), путь все еще будет работать.

person Akeem    schedule 11.03.2009
comment
я согласен с помощником базового URL, но я думаю, что иметь еще один для изображений, который расширяет этот, гораздо лучший подход - person Gabriel Solomon; 31.03.2009

В случае, если кто-то хочет знать лучший способ и не хочет тратить 2 часа на поиск Zend/Google. Для этого есть вспомогательный вид.

$this->view->serverUrl();
person puppybits    schedule 29.09.2011
comment
Исправление: $this-›serverUrl(); - person mzalazar; 20.03.2013

Если вы хотите указать имя хоста в своем layout файле, распечатайте это и получите свое HOST имя:

echo $this->serverUrl().$this->baseUrl()
person irfan khan    schedule 17.02.2012

Это мой помощник baseUrl:

class Zend_View_Helper_BaseUrl extends Zend_View_Helper_Abstract {
    public function baseUrl() {
        $protocol = isset($_SERVER['HTTPS']) ? 'https' : 'http';
        $server = $_SERVER['HTTP_HOST'];
        $port = $_SERVER['SERVER_PORT'] != 80 ? ":{$_SERVER['SERVER_PORT']}" : '';
        $path = rtrim(dirname($_SERVER['SCRIPT_NAME']), '/\\') . '/';
        return "$protocol://$server$port$path";
    }
}
person Community    schedule 04.07.2009
comment
используйте его так: ‹base href=‹?= $this-›baseUrl() ?› /› - person ; 04.07.2009

Это сработало для меня:

эхо $this->serverUrl() . $это->URL()

person Strategist    schedule 05.01.2013