2016-12-18 15 views
1

私はすべてのURIがハードコードされているサイトを持っています。彼らは交換する必要があります。phiやhtmlでuriを動的に記述する最良の方法は?

これを処理するにはどのように最善の方法がありますか?変数

echo "$URL_HOME/....."; 

を使用して

echo URL_HOME . "/distribution/getit.php";

詩は今、二つのものがあります:私が使用している場合は以下のように猫に、エコー文字列の外で定義されて持っているので、ページ内のPHPは少し厄介定義私は知っている、ここで意見を求めることは決して、グローバル変数を使用しないでください。では、一般的なコーディング方法は何ですか?上記のどちらかが正しいですか?

(特定のアドレスは、何度も何度も使用されている一部のページでは、私はちょうどページのVARを構築し、そこにそれを使用します。)

+0

OPが「これを処理する最も良い方法」の表現を「これを処理する一般的な方法」、あるいは「これを処理する良い方法」に変更し、「何を一般的なコーディングの実践 "であるとすれば、それはそれを意見に基づいて少なくするだろうか?リビジョンポインタでコメントを残すMethinksは、このような質問が意見に基づいて閉じられている場合に役立ちます。 –

答えて

0

はどのように具体的には、あなたのサイトのアーキテクチャに大きく依存し、あなたのテンプレート処理が行われます。 $URL_HOMEを使用することができますが、テンプレート/その他の出力コンテキストに非グローバルスコープがある場合は、醜いです。簡単な解決策のために

、定数を定義し、あなたのURLを生成する機能を使用します。

const URL_HOME = 'http://example.net/'; 

function make_url($rel_url) 
{ 
    return URL_HOME . $rel_url . '.php'; 
} 
//... 
echo make_url('distribution/getit'); 

ここで我々は、機能.phpに追加しているだけでなく、'distribution/getit'と単に関数を呼び出します。これにより、後でURLフォーマットを変更することが容易になります(たとえば、.html拡張子、/ディレクトリ/スタイルクリーンURLへの切り替え、クエリ文字列の書き換えなど)。これで、コード内の複数の場所でベースURLなどを連結するのではなく、すべてのURLを1か所で調整できます。


1つのノッチアップで、URLを処理し、そのプロパティにベースURLなどを定義するクラス/メソッドを記述できます。また、異なるURLやURL形式を扱うための複数のメソッドを持つこともできます。ここに基本的な例があります。まず、静的な用法で、場合にあなたが短いものを維持したいとスコープごとに新しいインスタンスを作成するために、気にしない:

class Urls 
{ 
    public static $base = 'http://example.net/'; 
    public static $ext = '.php'; 

    public static function make($rel_url) 
    { 
     return $this->$base . $rel_url . $this->$ext; 
    } 
} 

echo Urls::make('distribution/getit'); 
// ... http://example.net/distribution/getit.php 

Urls::$base = 'http://sub.example.net/'; 
Urls::$ext = '.html'; 

echo Urls::make('distribution/getit'); 
// ... http://sub.example.net/distribution/getit.html 

あなたはスタティックモードをドロップし、オブジェクトをインスタンス化する場合は、しかし、あなたはそれを呼び出すことができますあまりにも内部の文字列:

class Urls 
{ 
    public $base = 'http://example.net/'; 
    public $ext = '.php'; 

    public function make($rel_url) 
    { 
     return $this->base . $rel_url . $this->ext; 
    } 
} 

$urly = new Urls(); 
echo "See here, {$urly->make('distribution/getit')}, the link!"; 

そうでない場合、あなたはすぐに代わりにそれをエコーで、あなたのHTMLをバッファリングした場合、あなたはまた、トークンを使用することができ、例えば{ base_url }distribution/getit.phpを入力し、最終出力前にstr_replace('{ base_url }', 'http://whatever', $HTML);を実行します。もう少し複雑なスピンで、{% url:distribution/getit %}などのトークンを使用し、最後にpreg_replace_callbackを実行し、一致するすべてのURLトークンをURLハンドラにパイプします。静的HTMLテンプレートを使用する場合は、いい方法です。 (コードとプレゼンテーションの分離は良い考えです)

+0

これらは技術的に正しいオプションですが、IMOでは、ページの上部またはインクルードにOPのオリジナル定義の「定義」を使用するよりも「乱雑」ではありません。 – WillardSolutions

+0

'define' /' const'を使うことは、非常に基本的なニーズのための素晴らしい解決策になります。 Opは、ただし、連結して好きではありません! (私は個人的にはそれがなぜ難しいのか分かりません)。これらは単にURL生成を処理するための一般的なオプションであり、URLスキームが最終的に改訂されるときの柔軟性を提供します。将来のリビジョン/リライトは、OPのアプローチが乱雑になるところです。 –

関連する問題