Zend Framework の紹介

 Learning Zend Framework

appendix

 Zend Framework リファレンス


  • 第36章 Zend_Gdata
  • 第37章 Zend_Http
  • 第38章 Zend_InfoCard
  • 第39章 Zend_Json
  • 第40章 Zend_Layout
  • 第41章 Zend_Ldap
  • 第42章 Zend_Loader
  • 第43章 Zend_Locale
  • 第44章 Zend_Log
  • 第45章 Zend_Mail
  • 第46章 Zend_Markup
  • 第47章 Zend_Measure
  • 第48章 Zend_Memory
  • 第49章 Zend_Mime
  • 第50章 Zend_Navigation
  • 第51章 Zend_Oauth
  • 第52章 Zend_OpenId
  • 第53章 Zend_Paginator
  • 第54章 Zend_Pdf
  • 第55章 Zend_ProgressBar
  • 第56章 Zend_Queue
  • 第57章 Zend_Reflection
  • 第58章 Zend_Registry
  • 第59章 Zend_Rest

  • 第60章 Zend_Search_Lucene
  • 第61章 Zend_Serializer
  • 第62章 Zend_Server
  • 第63章 Zend_Service
  • 第64章 Zend_Session
  • 第65章 Zend_Soap
  • 第66章 Zend_Tag
  • 第67章 Zend_Test
  • 第68章 Zend_Text
  • 第69章 Zend_TimeSync
  • 第70章 Zend_Tool
  • 第71章 Zend_Tool_Framework
  • 第72章 Zend_Tool_Project
  • 第73章 Zend_Translate
  • 第74章 Zend_Uri
  • 第75章 Zend_Validate
  • 第76章 Zend_Version
  • 第77章 Zend_View
  • 第78章 Zend_Wildfire
  • 第79章 Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 70.6% Update 2010-11-28 - Revision 23415

    第24章 Zend_Controller

    目次

    24.1. Zend_Controller クイックスタート
    24.1.1. 導入
    24.1.2. クイックスタート
    24.1.2.1. ファイルシステムレイアウトの作成
    24.1.2.2. ドキュメントルートの設定
    24.1.2.3. rewrite ルールの作成
    24.1.2.4. 起動ファイルの作成
    24.1.2.5. デフォルトのアクションコントローラの作成
    24.1.2.6. ビュースクリプトの作成
    24.1.2.7. エラーコントローラの作成
    24.1.2.8. 実際に見てみましょう!
    24.2. Zend_Controller の基本
    24.3. フロントコントローラ
    24.3.1. 概要
    24.3.2. 主要なメソッド
    24.3.2.1. getInstance()
    24.3.2.2. setControllerDirectory() および addControllerDirectory
    24.3.2.3. addModuleDirectory() および getModuleDirectory()
    24.3.2.4. dispatch()
    24.3.2.5. run()
    24.3.3. 環境へのアクセス用メソッド群
    24.3.4. フロントコントローラのパラメータ
    24.3.5. フロントコントローラの継承
    24.4. リクエストオブジェクト
    24.4.1. 導入
    24.4.2. HTTP リクエスト
    24.4.2.1. リクエストデータへのアクセス
    24.4.2.2. ベース URL およびサブディレクトリ
    24.4.2.3. リクエストメソッドの判定
    24.4.2.4. AJAX リクエストの検出
    24.4.3. リクエストオブジェクトのサブクラスの作成
    24.5. 標準のルータ
    24.5.1. 導入
    24.5.2. ルータの使用法
    24.5.3. 基本的な RewriteRouter の操作法
    24.5.4. デフォルトのルート
    24.5.5. ベース URL およびサブディレクトリ
    24.5.6. グローバルパラメータ
    24.5.7. ルートの型
    24.5.7.1. Zend_Controller_Router_Route
    24.5.7.1.1. 変数のデフォルト
    24.5.7.1.2. 変数の制約
    24.5.7.1.3. 翻訳済みセグメント
    24.5.7.2. Zend_Controller_Router_Route_Static
    24.5.7.3. Zend_Controller_Router_Route_Regex
    24.5.7.4. Zend_Controller_Router_Route_Hostname
    24.5.7.5. Zend_Controller_Router_Route_Chain
    24.5.7.5.1. Zend_Configを介したルートのチェーン
    24.5.7.6. Zend_Rest_Route
    24.5.7.6.1. Zend_Rest_Route 利用法
    24.5.7.6.2. Zend_Rest_Route with Zend_Config_Ini
    24.5.7.6.3. Zend_Rest_Controller
    24.5.8. RewriteRouter での Zend_Config の使用法
    24.5.9. ルータのサブクラスの作成
    24.6. ディスパッチャ
    24.6.1. 概要
    24.6.2. ディスパッチャのサブクラスの作成
    24.7. アクションコントローラ
    24.7.1. 導入
    24.7.2. オブジェクトの初期化
    24.7.3. ディスパッチ前後のフック
    24.7.4. アクセス用メソッド
    24.7.5. ビューの統合
    24.7.5.1. ビューの初期化
    24.7.5.2. ビューのレンダリング
    24.7.6. ユーティリティメソッド
    24.7.7. アクションコントローラのサブクラスの作成
    24.8. アクションヘルパー
    24.8.1. 導入
    24.8.2. ヘルパーの初期化
    24.8.3. ヘルパーブローカ
    24.8.4. 組み込みのアクションヘルパー
    24.8.4.1. ActionStack
    24.8.4.2. AutoComplete
    24.8.4.2.1. Dojo でのオートコンプリート
    24.8.4.2.2. Scriptaculous でのオートコンプリート
    24.8.4.3. ContextSwitch および AjaxContext
    24.8.4.3.1. デフォルトで使用できるコンテキスト
    24.8.4.3.2. 独自のコンテキストの作成
    24.8.4.3.3. アクションごとのコンテキストの設定
    24.8.4.3.4. コンテキストスイッチの初期化
    24.8.4.3.5. 追加機能
    24.8.4.3.6. AjaxContext の機能
    24.8.4.4. FlashMessenger
    24.8.4.4.1. 導入
    24.8.4.4.2. 基本的な使用例
    24.8.4.5. JSON
    24.8.4.6. Redirector
    24.8.4.6.1. 導入
    24.8.4.6.2. 基本的な使用例
    24.8.4.7. ViewRenderer
    24.8.4.7.1. 導入
    24.8.4.7.2. API
    24.8.4.7.3. 基本的な使用例
    24.8.4.7.4. 高度な使用例
    24.8.5. 独自のヘルパーの作成
    24.9. レスポンスオブジェクト
    24.9.1. 使用法
    24.9.2. ヘッダの操作
    24.9.3. 名前つきセグメント
    24.9.4. レスポンスオブジェクト内での例外の検査
    24.9.5. レスポンスオブジェクトのサブクラスの作成
    24.10. プラグイン
    24.10.1. 導入
    24.10.2. プラグインの書き方
    24.10.3. プラグインの使用法
    24.10.4. プラグインの取得と操作
    24.10.5. 標準の配布パッケージに含まれるプラグイン
    24.10.5.1. ActionStack
    24.10.5.2. Zend_Controller_Plugin_ErrorHandler
    24.10.5.2.1. 404 ハンドラとしての ErrorHandler の使用
    24.10.5.2.2. 前回のレンダリング結果の扱い
    24.10.5.2.3. プラグインの使用例
    24.10.5.2.4. エラーコントローラの例
    24.10.5.3. Zend_Controller_Plugin_PutHandler
    24.11. モジュラーディレクトリ構造の規約の使用
    24.11.1. 導入
    24.11.2. モジュールコントローラディレクトリの指定
    24.11.3. モジュールへのルーティング
    24.11.4. モジュールあるいはグローバルのデフォルトコントローラ
    24.12. MVC での例外
    24.12.1. 導入
    24.12.2. 例外の処理
    24.12.3. MVC で遭遇するであろう例外

    24.1. Zend_Controller クイックスタート

    24.1.1. 導入

    Zend_Controller は、Zend Framework の MVC システムの中心となるものです。MVCモデル-ビュー-コントローラ の頭文字をとったもので、アプリケーションのロジックと表示ロジックを分離させる設計手法です。 Zend_Controller_Front フロントコントローラ パターンを実装しており、 すべてのリクエストをいったんフロントコントローラで受け取った上でその URL にもとづいたアクションコントローラに配送します。

    Zend_Controller は、拡張性を考慮して作成されています。 拡張の方法としては、既存のクラスのサブクラスを作成する方法と アクションヘルパーを作成する方法があります。 新しいサブクラスを作成すると、コントローラクラスの基盤となる インターフェイスや機能を新たに書くことができます。 アクションヘルパーを使用すると、システムの機能を強化したり変更したりできるようになります。

    24.1.2. クイックスタート

    より詳しい情報が知りたい場合は、次のセクションを参照ください。 とりあえず動かしてみたいという方は、ここを読むといいでしょう。

    24.1.2.1. ファイルシステムレイアウトの作成

    まずはディレクトリ構成を決めましょう。 典型的なレイアウトは、次のようなものです。

    application/
        
    controllers/
            
    IndexController.php
        models
    /
        
    views/
            
    scripts/
                
    index/
                    
    index.phtml
            helpers
    /
            
    filters/
    html/
        .
    htaccess
        index
    .php

    24.1.2.2. ドキュメントルートの設定

    ウェブサーバのドキュメントルートを、先ほどのレイアウト中の html/ ディレクトリに設定します。

    24.1.2.3. rewrite ルールの作成

    上のレイアウトの html/.htaccess ファイルを、次のように編集します。

    RewriteEngine On
    RewriteCond 
    %{REQUEST_FILENAME} -[OR]
    RewriteCond %{REQUEST_FILENAME} -[OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule 
    ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
    [注意] mod_rewrite について

    上のリライトルールは、バーチャルホストのドキュメントルート配下にある すべてのファイルへのアクセスを許可するものです。 この方式で公開してしまってはまずいファイルがある場合は、 このルールにさらに制約を追加しなければなりません。 Apache のウェブサイトにいけば、 mod_rewrite について もっと詳しく知ることができます。

    IIS 7.0 をお使いの場合は、次のような rewrite 設定を使用します。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
         <system.webServer>
             <rewrite>
                 <rules>
                     <rule name="Imported Rule 1" stopProcessing="true">
                         <match url="^.*$" />
                         <conditions logicalGrouping="MatchAny">
                             <add input="{REQUEST_FILENAME}"
                                 matchType="IsFile" pattern=""
                                 ignoreCase="false" />
                             <add input="{REQUEST_FILENAME}"
                                 matchType="IsDirectory"
                                 pattern="" ignoreCase="false" />
                         </conditions>
                         <action type="None" />
                     </rule>
                     <rule name="Imported Rule 2" stopProcessing="true">
                         <match url="^.*$" />
                         <action type="Rewrite" url="index.php" />
                     </rule>
                 </rules>
             </rewrite>
         </system.webServer>
    </configuration>

    このルールは、既存のリソース (シンボリックリンク、空でないファイル、あるいは空でないディレクトリ) へのリクエストを適切に転送し、 それ以外のすべてのリクエストをフロントコントローラに転送します。

    [注意] 注意

    上の rewrire ルールは Apache 用のものです。 その他のウェブサーバ用の例については ルータのドキュメント を参照ください。

    24.1.2.4. 起動ファイルの作成

    起動ファイルとはすべてのリクエストの転送先となるファイルのことで、 今回の例では html/index.php がそれにあたります。 html/index.php をお好みのエディタで開き、次の内容を追加します。

    Zend_Controller_Front::run('/path/to/app/controllers');

    これは、フロントコントローラのインスタンスとディスパッチを行います。 この結果、アクションコントローラへリクエストが転送されます。

    24.1.2.5. デフォルトのアクションコントローラの作成

    アクションコントローラについて説明する前に、まず Zend Framework でのリクエストの処理方法について知っておきましょう。 デフォルトでは、URL パスの最初の部分がコントローラ、 そしてその次の部分がアクションに対応します。たとえば URLhttp://framework.zend.com/roadmap/components である場合、パスは /roadmap/components となり、これは roadmap コントローラの components アクションに対応します。 アクションを省略した場合は index アクションであるとみなされます。 またコントローラを省略した場合は index コントローラであるとみなされます (Apache が自動的に DirectoryIndex に対応させるという規約に従っています)。

    Zend_Controller のディスパッチャは、 コントローラを対応するクラスに関連付けます。 デフォルトでは、コントローラ名の先頭を大文字にしたものに Controller をつなげたものがクラス名となります。 つまり、上の例では roadmap コントローラが RoadmapController クラスに対応することになります。

    同様に、アクションもコントローラクラスのメソッドに関連付けます。 デフォルトでは、アクション名を小文字に変換して Action を追加したものがメソッド名となります。 つまり、上の例では components アクションは componentsAction() メソッドになり、最終的に RoadmapController::componentsAction() がコールされることになります。

    続いて、デフォルトのアクションコントローラと アクションメソッドを作ってみましょう。 先ほど説明したように、デフォルトのコントローラ名およびアクション名はどちらも index となります。 application/controllers/IndexController.php を開き、次の内容を入力しましょう。

    /** Zend_Controller_Action */
    class IndexController extends Zend_Controller_Action
    {
        public function 
    indexAction()
        {
        }
    }

    デフォルトでは ViewRenderer アクションヘルパーが有効になります。つまり、 アクションメソッドとそれに対応するビュースクリプトを用意すれば、 すぐにその内容をレンダリングできるというわけです。 デフォルトでは、MVC のビュー層として Zend_View を使用します。 ViewRenderer は、コントローラ名 (たとえば index) とアクション名 (たとえば index) から処理するテンプレートを決定します。 デフォルトでは、テンプレートの拡張子は .phtml となります。つまり、上の例では index/index.phtml をレンダリングします。 さらに ViewRenderer は、 コントローラと同一階層にある views/ ディレクトリを自動的にビューの基底ディレクトリとみなし、 views/scripts/ ビュースクリプトがおかれるものと考えます。 したがって、実際にレンダリングされるテンプレートは application/views/scripts/index/index.phtml となります。

    24.1.2.6. ビュースクリプトの作成

    先ほど説明したように、ビュースクリプトの場所は application/views/scripts/ です。 デフォルトコントローラにおけるデフォルトのアクションのビュースクリプトは application/views/scripts/index/index.phtml となります。このファイルを作成し、何か HTML を入力してみましょう。

    <!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
    >
    <
    html>
    <
    head>
      <
    meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <
    title>My first Zend Framework App</title>
    </
    head>
    <
    body>
        <
    h1>HelloWorld!</h1>
    </
    body>
    </
    html>

    24.1.2.7. エラーコントローラの作成

    デフォルトで、 エラーハンドラプラグイン が登録されています。 このプラグインを使用するには、エラー処理用のコントローラが必要です。 デフォルト設定では、デフォルトモジュールの ErrorControllererrorAction() というメソッドがあることを想定しています。

    class ErrorController extends Zend_Controller_Action
    {
        public function 
    errorAction()
        {
        }
    }

    先ほど説明したディレクトリ構成により、このファイルは application/controllers/ErrorController.php に配置されることになります。これとは別に、ビュースクリプト application/views/scripts/error/error.phtml が必要です。その中身は、たとえば次のようになるでしょう。

    <!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
    >
    <
    html>
    <
    head>
      <
    meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <
    title>エラー</title>
    </
    head>
    <
    body>
        <
    h1>エラーが発生しました</h1>
        <
    p>エラーが発生しました。後ほどもう一度お試しください。</p>
    </
    body>
    </
    html>

    24.1.2.8. 実際に見てみましょう!

    ここまでくれば、実際にブラウザでサイトを表示してみることができます。 あなたのドメインが example.com だとすると、 以下のいずれかの URL で先ほど作成したページが表示されることでしょう。

    • http://example.com/

    • http://example.com/index

    • http://example.com/index/index

    これで、実際にコントローラやアクションを作成する準備ができました。 おめでとうございます!

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...