Лучшая практика создания абсолютных URL-адресов с помощью рамки Zend?

Существует ли наилучшая практика для создания абсолютных URL-адресов с использованием рамки Zend? Интересно, есть ли какой-нибудь помощник или просто это будет конкатенировать схему, хост и т.д. Из переменной $_SERVER, а затем добавить относительный путь, сгенерированный Zend.

Ответы

Ответ 1

phpfour путь в порядке, но вы должны проверить https://, ftp://и mailto: тоже...:)

Я prefefer, имея все URL-адреса root-absolute (/files/js/jquery.js). "Способ хардкора zend" -

<?php 
// document root for example.com is in /htdocs 
// but application index.php resides in /htdocs/myapp/public
echo $this->baseUrl('css/base.css'); 
//will return /myapp/public/css/base.css

echo $this->serverUrl() . $this->baseUrl('css/base.css');
//will return http://www.example.com/myapp/public/css/base.css

echo '//' . $this->getHelper('ServerUrl')->getHost() . $this->baseUrl('css/base.css');
//will return protocol relative URL //www.example.com/myapp/public/css/base.css

Ответ 2

Без mvc

echo $this->serverUrl() . $this->baseUrl('cass/base.css');

или с mvc

echo  $this->serverUrl() . $this->url(array('controller'=>'index','action'=>'index'),null,true);

Ответ 3

В моих приложениях я сохраняю "baseUrl" в моем приложении, и я назначаю это в реестр при начальной загрузке. Позже я использую следующий помощник просмотра для создания URL-адреса:

<?php

class Zend_View_Helper_UrlMap
{
    public function UrlMap($original)
    {
        $newUrl  = $original;
        $baseUrl = Zend_Registry::get('baseUrl');

        if (strpos($newUrl, "http://") === false) {
            $newUrl = $baseUrl . $newUrl;
        }

        return $newUrl;
    }
}

Преимущество: я могу внести любые изменения во все URL-адреса в представлении из одного места.

Надеюсь, что это поможет.

Ответ 4

Я бы не использовал $_SERVER, я бы использовал значения из Zend_Controller_Request_Http::getServer($keyName); (или прямые геттеры на объекте запроса, когда это применимо, - я забываю, какие из них являются непосредственными членами объекта и с какими из них нужно обращаться с помощью getServer). Технически это те же самые значения, но IMO лучше подходит для Zend, чем для использования исходного PHP-доступа. Но да, котируя вместе, вы должны получить то, что вам нужно. Это на самом деле способ, которым я это сделал для SSL-контроллера plugin/url-помощника.

Там может быть лучший способ, хотя...

Ответ 5

Используйте метод ниже.

<a href="<?php echo $this->url('application', ['action' => 'detail'], ['force_canonical' => true])?>">