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>