2009-12-10 18 views
15

是否有使用Zend框架创建绝对URL的最佳做法?我想知道是否有一些助手,或者如果这只是将$ _SERVER变量中的方案,主机等连接起来,然后添加由Zend生成的相对路径。使用Zend框架创建绝对URL的最佳实践?

回答

24

phpfour的方式是确定的,但你必须检查https://开头,FTP://和邮寄地址:太... :)

我prefefer有所有URL根绝(/files/js/jquery.js)。该 “铁杆Zend的方式” 是

<?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 
+1

+1,最好在99%的时间内使用标准方法 - Zend Framework已经为您提供了这一点。如果您需要手动更改网址库,您也可以自行将其设置在引导程序中。 – 2009-12-10 18:23:02

+2

echo $ this-> serverUrl()。 $这 - >的baseUrl( 'cassbase.css'); (这是绝对使用zend serverurl视图助手) – 2011-02-19 18:04:07

+0

$ this-> baseUrl返回一个URL相对于Web服务器的根,如下所述:http://framework.zend.com/manual/en/zend.view.helpers .html#zend.view.helpers.initial.baseurl,TMHO这个答案是错误的。 – AsTeR 2012-05-15 20:19:23

0

我不会使用$ _SERVER,我会使用Zend_Controller_Request_Http::getServer($keyName);(或者请求对象上的直接获取方法,这些方法适用时我忘记了哪些是对象的直接成员,哪些需要使用getServer来访问) 。从技术上讲,这些都是完全相同的值,但IMO更好地使用它的Zend方式,而不是使用原始PHP访问。但是,把它们放在一起应该可以得到你所需要的东西。这实际上是我为SSL控制器插件/ url助手做的。

有可能是虽然一个更好的办法...

2

在我的应用程序,我保持“的baseUrl”在我的应用程序的配置,我赋值给上引导注册表中。后来我用下面的视图助手生成的网址:

<?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; 
    } 
} 

好处:我可以在从一个地方的视图中的所有网址的任何变化。

希望这会有所帮助。

+2

'Zend_Registry'是相当不必要的。更好的方法是使用'Zend_Controller_Front :: setBaseUrl()'和'Zend_Controller_Front :: getBaseUrl()'。这样,你也可以使用包含的视图助手,所以你不必自己推出。 – 2009-12-10 18:29:15

13

没有MVC

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

或MVC

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

使用下面的方法。

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