Is there a best practice for creating absolute URLs using the Zend framework? I wonder if there is some helper or if this would just be concatenating the scheme, host, etc. from the $_SERVER variable and then add the relative path generated by Zend.
I wouldnt use $_SERVER, I would use the values from Zend_Controller_Request_Http::getServer($keyName);
(or the direct getters on the request object when that applies - i forget which ones are direct members of the object and which ones need to be accessed with getServer). Technically these are the exact same values, but IMO its better access it the Zend way than to use the raw PHP access. But yes catting those together should get you what you need. This is actually the way i did it for an SSL controller plugin/url helper.
There could be a better way though...
In my applications, I keep a "baseUrl" in my application config and I assign that to registry on bootstrapping. Later I use the following View Helper to generate the 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;
}
}
Benefit: I can make any change on all the URLs in the view from one place.
Hope this helps.
phpfour's way is OK, but you have to check for https://, ftp:// and mailto: too... :)
I prefefer having all urls root-absolute (/files/js/jquery.js
). The "hardcore zend way" is
<?php echo $this->baseUrl('css/base.css'); ?>