技術日記
Zend_Applicationクイックスタートの翻訳Edit

Zend_Applicationクイックスタートの原文はこちら

4.2. Zend_Applicationクイックスタート

Zend_Applicationによる開発をスタートする方法は、プロジェクトの始め方によって二通りある。どちらの場合でも、Bootstrapクラスと関連する設定ファイルを作成することから始まる。 新しいプロジェクトの作成にZend_Toolを使うのならば、このまま続きをどうぞ。すでに作りかけているプロジェクトにZend_Applicationを追加したい場合は、リンク先までスキップを。
4.2.1. Zend_Toolを使う場合
Zend_Toolを使ってプロジェクトスケルトンを生成するのが、もっとも素早いZend_Applicationを使ったアプリケーション開発の始め方だ。これによりBootstrapクラス&ファイルなども生成される。 プロジェクトを生成するには、zfコマンド(*nixシステムでは)を実行する。
% zf create project newproject
Windowsではzf.batコマンドとなる。
C:> zf.bat create project newproject
どちらも以下のようなプロジェクトスケルトンを生成する。
newproject
|-- application
|   |-- Bootstrap.php
|   |-- configs
|   |   `-- application.ini
|   |-- controllers
|   |   |-- ErrorController.php
|   |   `-- IndexController.php
|   |-- models
|   `-- views
|       |-- helpers
|       `-- scripts
|           |-- error
|           |   `-- error.phtml
|           `-- index
|               `-- index.phtml
|-- library
|-- public
|   |-- .htaccess*1
|   `-- index.php
`-- tests
|-- application
|   `-- bootstrap.php
|-- library
|   `-- bootstrap.php
`-- phpunit.xml
上図の中で、起動処理(bootstrap)はnewproject/application/Bootstrap.phpに置かれ、以下のような内容となっている。
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
設定ファイルが、newproject/configs/applicaiton.iniとして生成されている点にも注目しよう。以下のような内容となっている。
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
ここに書かれたすべての設定は、Zend_Applicationおよび起動処理で使われる。 他には、Zend_Applicationの呼び出し(invoke)・実行(dispatch)を行うnewproject/public/index.phpファイルも興味深い。
// アプリケーションディレクトリの定義
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH',
realpath(dirname(__FILE__) . '/../application'));
// アプリケーション環境の定義
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV',
(getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
: 'production'));
/** Zend_Application */
require_once 'Zend/Application.php';
// アプリケーションの生成・起動・実行
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
->run();
このままクイックスタートを続けるなら、リソースの項までスキップを。
4.2.2. Zend_Applicationを既存のアプリケーションに追加する場合
Zend_Applicationの基本はとてもシンプルだ。
  • Bootstrapクラスが書かれたapplication/Bootstrap.phpファイルを作成する。
  • Zend_Applicationに必要とされる最低限の設定が書かれた設定ファイル、application/configs/application.iniを作成する。
  • public/index.phpをZend_Applicationを利用するように書き換える。
最初に、Bootstrapクラスを作成しよう。以下のような内容のapplication/Bootstrap.phpファイルを作成する。
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
続いて、設定ファイルを用意する。このチュートリアルでは、INI形式の設定ファイルを利用するが、XMLやPHP形式の設定ファイルを利用してもかまわない。以下のような内容を持つ、application/configs/application.iniを作成しよう。
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"*2
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
今度は窓口となるスクリプト、public/index.phpを修正しよう。もしそのようなファイルが存在しない場合は作成し、以下のような内容に書き換えよう。*3
// アプリケーションディレクトリの定義
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH',
realpath(dirname(__FILE__) . '/../application'));
// アプリケーション環境の定義
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV',
(getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
: 'production'));
// 通常は、あなたのlibrary/ディレクトリもinclude_pathに追加したいだろう。
// 特にそこにZFがインストールされている場合などは。
set_include_path(implode(PATH_SEPARATOR, array(
dirname(dirname(__FILE__)) . '/library',
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
// アプリケーションの生成・起動・実行
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
->run();
アプリケーション環境定数が、環境変数"APPLICATION_ENV"から取得されていることに注目して欲しい。Webサーバーの環境変数として設定する方法を推奨している。Apacheではバーチャルホスト設定もしくは.htaccessで設定できる。public/.htaccess*4に以下のように記述することで、推奨設定を実現できる。
SetEnv APPLICATION_ENV development
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
mod_rewriteに関して 上記のリライトルールは、バーチャルホストのドキュメントルート以下に置かれたすべてのファイルへのアクセスを許可する。公開されたくないファイルがある場合は、よりアクセスを制限するルールが必要だ。ApacheのWebサイトでmod_rewriteについてより詳しく調べるといいだろう。

これであなたはZend_Applicationのすべての恩恵を受ける準備が整った。*5

4.2.3. リソースの追加と作成

ここまで指示通りに進めてきたなら、あなたの起動(bootstrap)クラスはフロントコントローラを使って動作するようになっているだろう。しかし、たいていの場合もうちょっと設定をいじる必要が出てくるはずだ。

このセクションでは、あなたのアプリケーションに二つのリソースを追加していく。まずレイアウトのセットアップを行い、それからビューオブジェクトのカスタマイズを行う。

"layout"リソースは、ZendApplicationが提供する標準リソースの一つだ。これを使うには、ZendLayoutインスタンスの設定を行うための設定値を指定しておく必要がある。

これを使うためには、設定ファイルを更新するだけでいい。

[production]
phpSettings.displaystartuperrors = 0
phpSettings.displayerrors = 0
bootstrap.path = APPLICATIONPATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATIONPATH "/controllers"
; 以下の行を追加
resources.layout.layout = "layout"
resources.layout.layoutPath = APPLICATIONPATH "/layouts/scripts"
[staging : production]
[testing : production]
phpSettings.displaystartuperrors = 1
phpSettings.displayerrors = 1
[development : production]
phpSettings.displaystartuperrors = 1
phpSettings.displayerrors = 1
もしまだ、application/layouts/scriptsディレクトリとその中のlayout.phtmlファイルを作っていないなら、それらを用意しよう。最初のレイアウトとしては、以下のような内容がいいだろう(そして、これは次に説明するビューリソースと連動する)。
<?php echo $this->doctype() ?>
<html>
<head>
<?php echo $this->headTitle() ?>
<?php echo $this->headLink() ?>
<?php echo $this->headStyle() ?>
<?php echo $this->headScript() ?>
</head>
<body>
<?php echo $this->layout()->content ?>
</body>
</html>
これでレイアウト機能が動くようになった。

続いて、ビューのカスタマイズ機能を追加しよう。ビューを初期化する際に、HTMLのドキュメントタイプ情報やHTMLのHEAD部分で利用するタイトルの初期値をセットしたい。これは、Bootstrapクラスにメソッドを追加することで実現できる。

class Bootstrap extends ZendApplicationBootstrapBootstrap
{
protected function _initView()
{
// ビューの初期化
$view = new ZendView();
$view->doctype('XHTML1STRICT');
$view->headTitle('My First Zend Framework Application');
// ViewRendererに追加
$viewRenderer = ZendControllerActionHelperBroker::getStaticHelper(
'ViewRenderer'
);
$viewRenderer->setView($view);
// returnすることでbootstrapに保存される
return $view;
}
}
このメソッドは、アプリケーションを起動すると自動的に実行され、アプリケーションが必要なときにはビューが確実に初期化されていることが保証される。
4.2.4. ZendApplicationを使った次のステップ
ここまでの説明で、ZendApplicationの利用を開始し、アプリケーションを起動させることができるようになっただろう。ここからはリソースメソッドや最高の再利用性のためのリソースプラグインクラスの作成を始めていく。続きを読んで、より詳しく学ぼう。

1:原文では.htaccessが書かれていないけど、あった方がいいだろう

2:「includePaths.library = APPLICATION_PATH "/../library"」みたいな記述って可能だったんだ。INIファイル内で定数が展開されるってのは知ってたけど、定数と文字列を連結したりも出来るのね。

3:「; otherwise」の接続がよくわからなかったんで適当

4:ここだけ本文では.htaccesってsが一個抜けてるな

*5:たぶんyou're all set toって言い回しがあるんだろうけど、よくわからないから雰囲気で適当に

Published At2009-06-24 09:00Updated At2019-12-30 23:55