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>