SHOEISHA iD

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

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

Zend Framework入門

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

サンプル

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

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"」
     

まとめ

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2226 2008/10/06 11:15

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング