Frameworkの環境は整ったので、ものすごく簡単なアプリケーションから作ってみます。アプリケーションルートを「zf1」とします。ディレクトリ構成まずはディレクトリ構成。ドキュメントルート直下にフォルダ「zf1」を作成し、その下に「application」を作成します。「application」下に「controllers」「views」を作成、「views」下に「index」を作成してください(結構面倒くさいでしょ?)。フォルダの名前に注意してください。「views」は、暗黙で参照される名前ですので、末尾の「s」が抜けていたりなどスペルミスがあるといきなり「ファイルが見つからない」エラーになってしまいます。説明文中の「applications」を「application」に修正しました。コメントでのご指摘、ありがとうございました。ドキュメントルートからのツリーは以下のようになります。htdocs/zf1/application/controllers/views/scripts/index/index.phpを作成するまずはURLリライトで必ず呼び出されるようにする「index.php」を作成します。このスクリプトがすべてのリクエストを処理することになります。zf1の下に以下の内容でindex.phpを作成してください。);index.phpここで行っているのは、以下の3つの処理です。ini_set()でエラーをブラウザへ表示するように設定(デバッグ向け)フロントコントローラクラスのソースをrequireルーティング&ディスパッチ処理の開始フロントコントローラ?いきなり、あたりまえのように「フロントコントローラ」と言われてもなんのことかわからないかも知れませんので、簡単に説明します。Frameworkのリクエスト処理は、「フロントコントローラがリクエストを受け付けて、ルータに行き先(ディスパッチ先)を決めさせ、決定した行き先(アクションコントローラ)へディスパッチャを介して処理を委譲する」という流れになります。用語が増えていますが^^;、順次解説していきますので、とりあえずは気にせず「こんな用語があるんだ」程度に考えていてください。この「フロントコントローラ」が、コード中に記述されている「Zend_Controller_Front」で、このクラスは「Zend/Controller/Front.php」で定義されています。命名規則こうしてクラス名とファイル名を並べてみるとちょっとしたことに気づくかもしれません。Frameworkのクラスとそれを定義するファイル名は単純なルールで決められています。フロントコントローラ「Zend_Controller_Front」のアンダースコアをパス区切りに置き換え、末尾に「.php」を補うと、インクルードパスを基点にしたファイルパスになります。ファイルパスのパスセパレータをアンダースコアに置き換えて「.php」を取り除くとクラス名になります。ここではまだ使用しませんが、データベースのテーブルを取り扱うための「Zend_Db_Table」という抽象クラスがありますが、これは「Zend/Db/Table.php」で定義されています。これの派生元になっている「Zend_Db_Table_Abstract」抽象クラスは「Zend/Db/Table/Abstract.php」で定義されています。これらのルールを把握していれば、あるクラスを使用するためにrequireしなければならないファイルパスがすぐわかると思います。このルールを適用するために、準備編でインクルードパスの設定をしていた、というわけです。アクションコントローラを作成するさて、いささか話がそれましたが、続けてコードを作成していきます。上記のindex.phpでは委譲先を決定して呼び出すところまでは行ってくれますが、肝心の委譲先がない状態ですので当然ながらエラーになります。次のステップでは処理の委譲先であるアクションコントローラを作成します。アクションコントローラは、フロントコントローラから開始されたディスパッチ処理の流れの中で、実際に要求を処理するための「アクション」を担当します。アクションコントローラの命名規則アクションコントローラにも命名規則があり、クラス名はCamelCase形式で「コントローラ名」とサフィックス「Controller」で構成する必要がある。アクションメソッド(実際にディスパッチ処理で呼び出されるメソッド)はcamelCase形式で、「アクション名」とサフィックス「Action」で構成する必要がある。ファイル名はクラス名+.phpである必要がある。いうルールに従う必要があります。コントローラとアクションの決定またちょっと横道にそれますが、「コントローラ名」と「アクション名」という用語がでてきましたが、それがどのように決定されるかわからないかもしれません。これらの情報はリクエストに含まれることになります。今回のアプリケーション「zf1」に対するリクエストURLが「http://<host名>/zf1/index/test」だったとすると、アプリケーションのルートになるURLは「http://<host名>/zf1/」で、そのあとの「index」がコントローラ名、最後の「test」がアクション名になります(さらにこの後ろに「<パラメータ名>/<パラメータ値>」という形式でGETのパラメータを渡すようになります)。このリクエストを処理するのが「IndexController」(コントローラ名の先頭を大文字にします)に実装された「testAction」メソッド、ということになります。リクエストでアクション名が省略された場合は「index」アクション、コントローラ名が省略された場合は「index」コントローラが指定されたものとみなされます。「http://<host名>/zf1/」(コントローラ・アクションとも省略)も「http://<host名>/zf1/index/」(アクションのみ省略)も「http://<host名>/zf1/index/index/」が指定されたことになります。アクションコントローラの実装これらの知識を元に、最低限のアクションコントローラを作成してみましょう。デフォルトの「IndexController」です。アクションに必要なコードをここに記述します。application/controllers/IndexController.phpとして保存してください。ビュースクリプトの作成ここまでの長々とした説明でようやく「index.php」、「application/controllers/IndexController.php」の2つのファイルを作成しましたが、これだけではまだ動作させられません。「あぁ、もううんざり」と思うかもしれませんが、あと少しだけお付き合いください(^^;。ビュースクリプトとは実はここまでではまだ「MVC」の「C」の部分しか取り扱っていません。「M」(モデル)の部分はデータベース周りのことになるのでまた後ほどにしておくとして、あとは「V」、つまりビューを取り扱う必要があります。Frameworkでビューを扱うのは、そのまんまの名前の「Zend_View」になります。実は、アクションコントローラはデフォルトでZend_Viewのインスタンスを与えられており、パブリックプロパティ「view」を介して値を「assign」することによりZend_Viewに出力させたいデータを渡すことができます。アクションコントローラがなにも支持をしなくても、Zend_Viewはディスパッチ処理が完了すると命名規則に従ったビュースクリプトを自動的に実行して、コントローラからassignされたデータをレンダリングするようになっています。ビュースクリプトの命名規則ここで、最初にあげたディレクトリ構成を見直してみてください。zf1/applicationの下に「views/scripts」というディレクトリを用意しています。これが先にあげた「命名規則」に従ったパスの基点で、この下にさらにコントローラ名に一致する名前のディレクトリを作成し、その中にアクション名に一致するビュースクリプトファイルを設置することで、ようやくリクエストを処理してブラウザへ表示することができるようになります。(面倒くさいですか?dara-jは面倒くさいと思います。)ビュースクリプトの実態ビュースクリプトファイルは、HTMLファイルにPHPコードを埋め込んだ、ある意味典型的なPHPファイルです。いくつかの注意点があります。ファイルの拡張子は「.phtml」にする必要がある。実行時はアクションコントローラに関連付けられたZend_Viewのコンテキストで動作する。1点目は実際にはカスタマイズ可能なのですが、フロントコントローラから開始される一連の流れではデフォルトの設定をそのまま使用したほうがよいので、この入門記事中ではビュースクリプトの拡張子は常に.phtmlにします。2点目はどういうことかというと、ビュースクリプト中で「$this」を参照するとそれがZend_Viewのインスタンスである、ということです。'hoge');」とすると、そのアクションに対応するビュースクリプト内からは「$this->hoge」にアクセスでき、その値が'hoge'になる、といった使い方をします。実装さて、ようやくコードです。先ほどのIndexController.phpを修正します。indexActionメソッドを以下のようにしてみましょう。);}}IndexController.php(改訂版)そしてビュースクリプトです。HTMLとしての記述は思い切り端折っていますので、気になるようでしたら補完してください。?></h3></body></html>index.phtmlこれでようやく今回作成するファイルが出揃いました。最終的にツリー構成は以下のようになります。Frameworkへ」が表示されればOKです。次回の予定ようやく最小限の構成ができたわけですが、単独のアクションを実装しただけではまったく意味がありません。Zend_Controller周りの詳細を知りたいのでしたら、ぜひリファレンスガイドに目を通してください。11:35)PHPの開始タグの「?」を忘れたり、開始タグそのものを忘れたりしてたので訂正しました。00.53)h3タグの閉じミスとビュースクリプト中のPHP閉じタグの記述ミスを修正しました。02:24)フォルダツリーでビュースクリプトのツリー構成から1階層抜けていたため、追加しました。正しくは「views/scripts/index/」になります。『ドキュメントルート直下にフォルダ「zf1」を作成し、その下に「applications」を作成します。18時59分27秒このようなページを作成していただいて、とてもありがとうございます。Frameworkに接しなくてはならなくて、でも挫折するばかりで困っておりました。すみません、一つだけ。前ページを見ればわかったことなのですが、".htaccess"の設置が書いていなかったので、少しハマりました。見当違いな指摘だったらすみません。さん、コメントありがとうございます。長期間放置ですみませんでした。".htaccess"の設置が書いていなかったので、ご指摘ありがとうございます。準備編を参照してもらうつもりでこちらには書いてなかったんですが、なるほどわかりづらかったですね。折りを見て修正しておきます。コメントをどうぞ※メールアドレスとURLの入力は必須ではありません。入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。※なお、送られたコメントはブログの管理者が確認するまで公開されません。http://dara-j.asablo.jp/blog/2007/08/28/1756022/tb※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。吊ブックマークレットtumblrのキーボードショートカットが便利になっとる。Chrome編dataスキームの画像をブロックしてみるローカルストレージを確認したり消したりするブックマークレットそうそう、いまさらTwitter始めました。(9)このブログについてJavaScriptとかC#とかPHPとか。