はどのように具体的には、あなたのサイトのアーキテクチャに大きく依存し、あなたのテンプレート処理が行われます。 $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テンプレートを使用する場合は、いい方法です。 (コードとプレゼンテーションの分離は良い考えです)
OPが「これを処理する最も良い方法」の表現を「これを処理する一般的な方法」、あるいは「これを処理する良い方法」に変更し、「何を一般的なコーディングの実践 "であるとすれば、それはそれを意見に基づいて少なくするだろうか?リビジョンポインタでコメントを残すMethinksは、このような質問が意見に基づいて閉じられている場合に役立ちます。 –