Существует ли наилучшая практика для создания абсолютных URL-адресов с использованием рамки Zend? Интересно, есть ли какой-нибудь помощник или просто это будет конкатенировать схему, хост и т. Д. Из переменной $ _SERVER, а затем добавить относительный путь, сгенерированный Zend.
Путь phpfour в порядке, но вы должны проверить https: //, ftp: // и mailto: тоже … 🙂
Я предпочитаю иметь все URL-адреса root-absolute ( /files/js/jquery.js
). «Hardcore zend way» – это
<?php // document root for example.com is in /htdocs // but application's 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
Без mvc
echo $this->serverUrl() . $this->baseUrl('cass/base.css');
или с mvc
echo $this->serverUrl() . $this->url(array('controller'=>'index','action'=>'index'),null,true);
В моих приложениях я сохраняю «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-адреса в представлении из одного места.
Надеюсь это поможет.
Я бы не использовал $ _SERVER, я бы использовал значения из Zend_Controller_Request_Http::getServer($keyName);
(или прямые геттеры на объекте запроса, когда это применимо, – я забываю, какие из них являются непосредственными членами объекта и с кем нужно обращаться с помощью getServer). Технически это те же самые значения, но IMO лучше подходит для Zend, чем для использования исходного PHP-доступа. Но да, котируя вместе, вы должны получить то, что вам нужно. Это на самом деле способ, которым я это сделал для SSL-контроллера plugin / url-помощника.
Там может быть лучший способ, хотя …
Используйте метод ниже.
<a href="<?php echo $this->url('application', ['action' => 'detail'], ['force_canonical' => true])?>">