SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend Framework入門

PHPでよりユーザフレンドリなURLを設計するために - Zend_Controllerの新しいルーティング機能 -

Zend Frameworkによる実践的なPHPアプリケーション開発 30

ホスト名によるルーティング(Route_Hostname)

 Route_HostnameはZend Frameworkのバージョン1.7で導入されたルートで、ホスト名によってルーティングをします。

 サブドメインなどを柔軟に設定できる環境では、サービスの単位ごとにホスト名を切り替えることがあると思います。これらのサービスを、1つのZend FrameworkのMVCアプリケーションで処理するための方法がホスト名によるルーティングです。

 例えば、プログラミングに関しての記事を掲載しているサイトで言語ごとに「php.example.com」「perl.exapmle.com」「ruby.exapmle.com」のようにホスト名を切り分けているとします。

 上の例のようなルートを実現するためには、次のようにします:

リスト1 ホスト名によるルーティング
$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クラスを利用します。例えば先ほど見たホスト名によるルートの後に、標準のルートでパスを処理したいとします。そのような場合には次のように書きます。

リスト2 ルートの数珠つなぎ
/* ホスト名によるルートと標準的なルート */
$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メソッドにつなぐルートを渡す方法があります。

次のページ
ローカルホストでのサンプル

この記事は参考になりましたか?

Zend Framework入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5526 2010/11/09 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー