ZendFrameworkチュートリアル その1
ZendFrameworkを試してみたので、チュートリアルのメモ。
参考
http://web-rhodia.com/pages/web/zf/zf-tutorial/ (分かりやすい)
公式のプログラマ向け日本語ガイド(一部邦訳)
ZendFrameworkにはコマンドラインツールがあるので、これを使ってまず行います。
コマンドラインツールのセットアップ(手抜き)
http://web-rhodia.com/pages/web/zf/zf-tutorial/p2
ガイドでは、コマンドラインツールをショートカットで実行できるようにセットアップするよう書いていますが、
解凍したZendFrameworkのソースを適当なディレクトリにおいて、 bin/zf.shを直接実行すればOK。
普通ユーザにアクセス権がない場合に設置した場合は、zf.shのパーミッションを755に。
動作を確認。オプションをつけずに実行すると、コマンドヘルプが表示されます
[cake@cake html]$ ../Zend/bin/zf.sh An Error Has Occurred An action and provider is required. Zend Framework Command Line Console Tool v1.11.11 Usage: zf [--global-opts] action-name [--action-opts] provider-name [--provider-opts] [provider parameters ...] Note: You may use "?" in any place of the above usage string to ask for more specific help information. Example: "zf ? version" will list all available actions for the version provider. Providers and their actions: Version zf show version mode[=mini] name-included[=1] Note: There are specialties, use zf show version.? to get specific help on them. Config zf create config zf show config zf enable config Note: There are specialties, use zf enable config.? to get specific help on them. zf disable config Note: There are specialties, use zf disable config.? to get specific help on them. Phpinfo zf show phpinfo Manifest zf show manifest Profile zf show profile Project zf create project path name-of-profile file-of-profile zf show project Note: There are specialties, use zf show project.? to get specific help on them. Application zf change application.class-name-prefix class-name-prefix Model zf create model name module View zf create view controller-name action-name-or-simple-name module Controller zf create controller name index-action-included[=1] module Action zf create action name controller-name[=Index] view-included[=1] module Module zf create module name Form zf enable form module zf create form name module Layout zf enable layout zf disable layout DbAdapter zf configure db-adapter dsn section-name[=production] DbTable zf create db-table name actual-table-name module force-overwrite Note: There are specialties, use zf create db-table.? to get specific help on them. ProjectProvider zf create project-provider name actions
プロジェクト作成
以下を実行。
[cake@cake html]$ ../Zend/bin/zf.sh create project zf-tutorial
これでzf-tutorialというディレクトリが作成されているので、この中のlibraryにZendFrameworkのLibraryをコピー。
[cake@cake html]$ cp ../Zend/library/Zend/ zf-tutorial/library/Zend/
これでアプリケーションの骨格完了。
ブラウザからzf-tutorial/public/にアクセスして表示を確認。
この段階でzf-tutotial/.zfproject.xmlが作成されてます。
MVCの自動生成
MVCもzfで作成した場合の、手順と作成される差分をメモ。
ブログっぽいものを作成してみます。
参考:http://web-rhodia.com/pages/web/zf/zf-tutorial/p3
データベースの作成。
mysql> CREATE DATABASE zfblog DEFAULT CHARACTER SET utf8; Query OK, 1 row affected (0.01 sec) mysql> use zfblog Database changed mysql> CREATE TABLE `blog` ( -> `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, -> `title` varchar(50) NOT NULL, -> `body` TEXT NOT NULL, -> `modified` DATETIME NOT NULL, -> `created` DATETIME NOT NULL, -> PRIMARY KEY(`id`) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.11 sec)
application/configs/application.iniにデータベースの接続設定を追加。
[cake@cake zf-tutorial]$ git diff application/configs/application.ini diff --git a/application/configs/application.ini b/application/configs/application.ini index d388364..9d7c4d9 100644 --- a/application/configs/application.ini +++ b/application/configs/application.ini @@ -9,6 +9,11 @@ resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0 [staging : production] +resources.db.adapter = PDO_MYSQL +resources.db.params.host = localhost +resources.db.params.username = hogehoge +resources.db.params.password = hogehoge +resources.db.params.dbname = zfblog
モデルを作成。
[cake@cake zf-tutorial]$ ../../Zend/bin/zf.sh create db-table Blog blog
Creating a DbTable at /var/www/html/zf-tutorial/application/models/DbTable/Blog.php
Updating project profile '/var/www/html/zf-tutorial/.zfproject.xml'
application/models/ 以下に DbTable/Blog.phpが作成され、
また、.zfproject.xmlが更新されています。
[cake@cake zf-tutorial]$ git diff diff --git a/.zfproject.xml b/.zfproject.xml index 473f739..69cfa58 100644 --- a/.zfproject.xml +++ b/.zfproject.xml @@ -15,7 +15,11 @@ </controllersDirectory> <formsDirectory enabled="false"/> <layoutsDirectory enabled="false"/> - <modelsDirectory/> + <modelsDirectory> + <dbTableDirectory> + <dbTableFile dbTableName="Blog"/> + </dbTableDirectory> + </modelsDirectory> <modulesDirectory enabled="false"/> <viewsDirectory> <viewScriptsDirectory> [cake@cake zf-tutorial]$ cat application/models/DbTable/Blog.php <?php class Application_Model_DbTable_Blog extends Zend_Db_Table_Abstract { protected $_name = 'blog'; }
コントローラの作成も、コマンドはほぼ一緒のようです
[cake@cake zf-tutorial]$ ../../Zend/bin/zf.sh create Controller blog Blog Note: The canonical controller name that is used with other providers is "Blog"; not "blog" as supplied Creating a controller at /var/www/html/zf-tutorial/application/controllers/BlogController.php Creating an index action method in controller Blog Creating a view script for the index action method at /var/www/html/zf-tutorial/application/views/scripts/blog/index.phtml Creating a controller test file at /var/www/html/zf-tutorial/tests/application/controllers/BlogControllerTest.php Updating project profile '/var/www/html/zf-tutorial/.zfproject.xml'
CakePHPのbakeとは違い、この段階でアクションはIndexしかないので、適宜追加します。
[cake@cake zf-tutorial]$ ../../Zend/bin/zf.sh create action view Blog Creating an action named view inside controller at /var/www/html/zf-tutorial/application/controllers/BlogController.php Creating an action test in /var/www/html/zf-tutorial/tests/application/controllers/BlogControllerTest.php Updating project profile '/var/www/html/zf-tutorial/.zfproject.xml' Creating a view script for the view action method at /var/www/html/zf-tutorial/application/views/scripts/blog/view.phtml Updating project profile '/var/www/html/zf-tutorial/.zfproject.xml'
- コントローラにアクションを追加し
- テストコントローラにもアクション追加
- ビューを作成し
- .zfproject.xmlを更新する
この4つが行われますが、アクション名がviewでもaddでも、その他何でも作成される内容はほとんど空っぽで、一緒です。
CakePHPなどのようなCRUD作成はできません。
作成内容
- コントローラ
public function indexAction() { // action body } + public function viewAction() + { + // action body + } }
- ビュー
<br /><br /> <div id="view-content"> <p>View script for controller <b>Blog</b> and script/action name <b>delete</b></p> </div>