2009-12-10 16 views
15

Zendフレームワークを使用して絶対URLを作成することはベストプラクティスですか?私はいくつかのヘルパーがいるかどうか、またはこれが$ _SERVER変数からスキーム、ホストなどを連結して、Zendによって生成された相対パスを追加するのではないかと思います。Zendフレームワークで絶対URLを作成するベストプラクティス?

答えて

24

phpfourの道はOKですが、HTTPSをチェックする必要があります://やftp://とのmailto:あまりにも... :)

私はすべてのURLがroot-絶対(/files/js/jquery.js)を有するprefefer。 "筋金入りZendの方法は、" MVC

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

またはMVC

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

+1、99%の標準的なアプローチを使用することをお勧めします.Zend Frameworkにはすでにこれが含まれています。 URLベースを手動で変更する必要がある場合は、自分でブートストラップに設定することもできます。 –

+2

echo $ this-> serverUrl()。 $ this-> baseUrl( 'cassbase.css'); (これは絶対にzend serverurlビューヘルパーを使用しています) –

+0

$ this-> baseUrlは、ここに記載されているようにWebサーバーのルートからの相対URLを返します。http://framework.zend.com/manual/en/zend.view.helpers .html#zend.view.helpers.initial.baseurl、TMHOこの回答は間違っています。 – AsTeR

0

私はZend_Controller_Request_Http::getServer($keyName);の値を使用します(または、要求オブジェクトの直接ゲッターが該当します - オブジェクトの直接のメンバーであるものとgetServerでアクセスする必要があるものを忘れてしまいます) 。技術的にはこれらはまったく同じ値ですが、IMOは生のPHPアクセスを使用するよりも、Zendにアクセスするほうが効率的です。しかし、それらを一緒に召喚することは、あなたが必要とするものを手に入れるべきです。これは実際に私がSSLコントローラのプラグイン/ URLヘルパーのために行った方法です。

は、私のアプリケーションでは

2

は、私は自分のアプリケーションの設定で「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; 
    } 
} 

利点:私は1つの場所からのビュー内のすべてのURLに任意の変更を行うことができます。

これが役に立ちます。

+2

'Zend_Registry'はかなり不要です。もっと良いアプローチは 'Zend_Controller_Front :: setBaseUrl()'と 'Zend_Controller_Front :: getBaseUrl()'です。そうすることで、独自のビューヘルパーを使用して、独自のビューヘルパーを使用することもできます。 –

13

です。

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

-1

と、以下の方法を使用せずに

<?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 
関連する問題