サンプル
ここでルーティングを使った簡単なサンプルを示します。
<?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が送られます。
設定ファイルによるルート定義
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階層
- 第2階層
- 第3階層 以下
addConfig()
第2引数で指定するもので、これを利用してルートの設定を行うことになる。項目 | 内容 |
route | ルーティング方式”archive/:year/*” |
defaults.<パラメータ> | デフォルト値 |
reqs.<パラメータ> | 制限。「"\d+"」 |
type | 使用クラス「Z_C_R_R_Static」とか(デフォルトはZCRR) |
map | Regexの第3引数。「~.map.1="year"」 |
まとめ
以上、今回は、モジュールの使用とルーティングの方法について解説しました。次回は、引き続きアクションヘルパーとプラグインについて紹介する予定です。