ホスト名によるルーティング(Route_Hostname)
Route_HostnameはZend Frameworkのバージョン1.7で導入されたルートで、ホスト名によってルーティングをします。
サブドメインなどを柔軟に設定できる環境では、サービスの単位ごとにホスト名を切り替えることがあると思います。これらのサービスを、1つのZend FrameworkのMVCアプリケーションで処理するための方法がホスト名によるルーティングです。
例えば、プログラミングに関しての記事を掲載しているサイトで言語ごとに「php.example.com」「perl.exapmle.com」「ruby.exapmle.com」のようにホスト名を切り分けているとします。
上の例のようなルートを実現するためには、次のようにします:
$lang_route = new Zend_Controller_Router_Route_Hostname(
':lang.exapmle.com',
array(
'controller' => 'article',
'action' => 'index'));
この例のように、Zend_Controller_Router_Route_Hostnameクラスのコンストラクタは2つの引数を取ります。1つ目はマッチするホスト名、2つ目はルーティングのパラメータです。このうち、マッチするホスト名の書式は次のような要素からなります。
| 要素 | 名前 |
| . | 区切り |
| name | 名前(静的な要素) |
| :name | パラメータ(動的な要素) |
なお、このホスト名によるルーティングは必ず他のルートと組み合わせて使ってください。ホスト名によるルーティングを単独で使うこともできますが、そうするとURLのパスに相当する部分を完全に無視するルートになってしまいます。
ここについては、次項の「数珠つなぎ」も参照してください。
数珠つなぎ(Route_Chain)
Route_ChainはZend Frameworkのバージョン1.8で導入されたルートで、複数のルートを組み合わせる機能を提供します。例えば、先ほど紹介したホスト名によるルーティングと他のルートを組み合わせるのに利用します。
複数のルートを組み合わせて、新しいルートを作るためにはZend_Controller_Router_Route_Chainクラスを利用します。例えば先ほど見たホスト名によるルートの後に、標準のルートでパスを処理したいとします。そのような場合には次のように書きます。
/* ホスト名によるルートと標準的なルート */ $hostRoute = new Zend_Controller_Router_Route_Hostname(...); $pathRoute = new Zend_Controller_Router_Route_Route(...); /* (1)方法 1 */ $chainRoute = new Zend_Controller_Router_Route_Chain(); $chainRoute->chain($hostRoute); $chainRoute->chain($pathRoute); /* (2)方法 2 */ $chainRoute = $hostRoute->chain($pathRoute);
このように、(1)Route_Chainルートのオブジェクトのchainメソッドを利用してルートをつないでいく方法と、(2)最初に処理を行うルートのchainメソッドにつなぐルートを渡す方法があります。
