CodeZine(コードジン)

特集ページ一覧

Zend Framework入門(4):PHPでMVCアプリケーションを構築しよう - Zend_Controller(中編) -

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/03/06 14:00
目次

サンプル

 ここでルーティングを使った簡単なサンプルを示します。

index.php
<?php
require_once 'Zend/Controller/Front.php';

// この行がないとエラーになります
// (Zend/Controller/Router/Route/Static.phpはなくてもOKのようです)
require_once 'Zend/Controller/Router/Route/Regex.php';

...

$front=Zend_Controller_Front::getInstance();

$router=$front->getRouter();
$router->addRoute('codezine1',
    new Zend_Controller_Router_Route(         //(1)
    'codezine/:id',
    array(
        'controller' => 'wings',
        'action' => 'codezine',
        'id' => 7
    ),
    array('id' => '\d+')
));

$router->addRoute('codezine2',
    new Zend_Controller_Router_Route_Static(  //(2)
    'w-codezine',
    array(
        'controller' => 'wings',
        'action' => 'codezine',
        'id' => 7
    )
));

$router->addRoute('codezine3',
    new Zend_Controller_Router_Route_Regex(   //(3)
    'w-codezine(\d+)\.html',
    array(
        'controller' => 'wings',
        'action' => 'codezine'
    ),
    array(1 => 'id')
));

$front->setControllerDirectory('../zendapps/controllers');
$front->dispatch();

 (1)~(3)でそれぞれ「Zend_Controller_Router_Route」「Zend_Controller_Router_Route_Static」「Zend_Controller_Router_Route_Regex」を使ったルートを追加しています。

 (1) 「http://localhost/codezine/<id>」にアクセスすると、wingsコントローラのcodezineアクションにidと共にディスパッチされます。idが省略されればid=7が送られます。idにあたる部分に整数が入らなければ、このルーティング方式には該当しないと判断され、(codezineコントローラを探すも見つからず)エラーになります。

 (2) 「http://localhost/w-codezine」にアクセスすると、wingsコントローラのcodezineアクションにディスパッチされます。id=7が送られます。

 (3) 「http://localhost/w-codezineX.html(Xは整数)」にアクセスすると、wingsコントローラのcodezineアクションにディスパッチされます。idにはXが送られます。

サンプル実行結果
サンプル実行結果
サンプル実行結果(idが整数でない場合)
サンプル実行結果(idが整数でない場合)
サンプル実行結果(静的なルーティング)
サンプル実行結果(静的なルーティング)
サンプル実行結果(正規表現)
サンプル実行結果(正規表現)

設定ファイルによるルート定義

 Zend_Config(後の回で解説予定)を使用した、設定ファイルによるルート定義の方法があります。

require_once 'Zend/Config/Ini.php'
…
$settei = new Zend_Config_Ini('../config/appsettei.ini',
                              'routesettei');  //(1)
$router = new Zend_Controller_Router_Rewrite();
$router->addConfig($settei, 'routes');  //(2)

 (1)の第1引数でiniファイルのパスを指定し、第2引数でiniファイル内のルート設定用のセクション名を指定します。(2)のaddConfig()で、iniファイルを取り込みます。

 iniファイル内の該当セクションは、次のように設定します。上記サンプルのルート定義を設定ファイルで表すと、以下にようになります。

…
[routesettei]  (セクション名)
routes.codezine1.route = "codezine/:id"
routes.codezine1.defaults.controller = "wings"
routes.codezine1.defaults.action = "codezine"
routes.codezine1.defaults.id = 7
routes.codezine1.reqs.id = "\d+"
routes.codezine2.type = "Zend_Controller_Router_Route_Static"
routes.codezine2.route = "w-codezine"
routes.codezine2.defaults.controller = "wings"
routes.codezine2.defaults.action = "codezine"
routes.codezine2.defaults.id = 7
routes.codezine3.type = "Zend_Controller_Router_Route_Regex"
routes.codezine3.route = "w-codezine(\d+)\.html"
routes.codezine3.defaults.controller = "wings"
routes.codezine3.defaults.action = "codezine"
routes.codezine3.map.id = 1
…

 項目は「.」で階層に分けられますが、階層ごとに以下のものを表しています。上記と照らし合わせながら見てみてください。

  • 第1階層
  • addConfig()第2引数で指定するもので、これを利用してルートの設定を行うことになる。
  • 第2階層
  • ルート名。
  • 第3階層 以下
  • これまで解説したルート設定の第2引数以下の各要素に該当。具体的には次のとおり。
     
    項目 内容
    route ルーティング方式”archive/:year/*”
    defaults.<パラメータ> デフォルト値
    reqs.<パラメータ> 制限。「"\d+"」
    type 使用クラス「Z_C_R_R_Static」とか(デフォルトはZCRR)
    map Regexの第3引数。「~.map.1="year"」
     

まとめ

 以上、今回は、モジュールの使用とルーティングの方法について解説しました。次回は、引き続きアクションヘルパーとプラグインについて紹介する予定です。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Zend Framework入門

もっと読む

著者プロフィール

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト 川北 季(カワキタ ミノル)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5