使用Zend框架创建绝对URL的最佳实践?

时间:2009-12-10 14:14:25

标签: php zend-framework hyperlink

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

5 个答案:

答案 0 :(得分:24)

phpfour的方式还可以,但你必须检查https://,ftp://和mailto:too ... :)

我首选所有网址为root-absolute(/files/js/jquery.js)。 “铁杆的方式”是

<?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 :(得分:13)

没有mvc

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

或使用mvc

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

答案 2 :(得分:2)

在我的应用程序中,我在应用程序配置中保留了“baseUrl”,并在引导时将其分配给注册表。稍后我使用以下View Helper生成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;
    }
}

好处:我可以从一个地方对视图中的所有网址进行任何更改。

希望这有帮助。

答案 3 :(得分:0)

我不会使用$ _SERVER,我会使用Zend_Controller_Request_Http::getServer($keyName);中的值(或请求对象上的直接getter) - 我会忘记哪些是对象的直接成员以及哪些是需要访问的用getServer)。从技术上讲,这些是完全相同的值,但IMO更好地访问Zend方式而不是使用原始PHP访问。但是,将它们放在一起可以得到你所需要的东西。这实际上是我为SSL控制器插件/ url帮助程序执行此操作的方式。

虽然可能有更好的方法......

答案 4 :(得分:-1)

使用以下方法。

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