ブートストラップ
ブートストラップは、アプリケーションで利用するリソースを生成する手順です。このブートストラップはブートストラップクラスの中で行われます。
なお、この記事の前の方で「Zend_Application_Boostrap」という名前を出しましたが、実際にはそのような名前のクラスは存在せず、図1のように2つのインターフェイスとそれを実装した抽象クラス、さらにそれを継承したクラスの4つの部品から成り立っています。
![図1 Zend_Application_Bootstrapのクラス構造](http://cz-cdn.shoeisha.jp/static/images/article/4366/fig01_s.jpg)
このうち、主に利用するのは「Zend_Application_BootstrapBootstrap」クラスで、通常はこのクラスを継承して自分のブートストラップクラスを作成することになると思います。ただし、いくつかの重要なメソッドは「Zend_Application_Bootstrap_Abstract」クラス内で定義されているため、必要に応じてこちらのクラスも参照する必要があるかもしれません。
このブートストラップクラス内では、リソースの作成を行っています。このリソースの作成を行うには
- ブートストラップクラス内のメソッドを利用
- リソースプラグインを利用
の2つの方法あります。
ブートストラップクラス内での生成
1つ目はブートストラップクラスに「_init」から始まるメソッドを増やし、その中でリソースを生成する方法です。この方法を利用するためには、基本的には自分で「Zend_Application_BootstrapBootstrap」クラスを継承したクラスを作成し、その自作のクラス内に新しいメソッドを記述することになります(と言いつつも、今までもそうしてきましたが)。
それでは例を見てみましょう。
<?php require_once 'codezine_zend_view.php'; class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { public function _initCaptcha() { /* CAPTCHAを作成 */ $captcha = new Zend_Captcha_Figlet(array( 'name' => 'foo', 'wordLen' => 6, 'timeout' => 300)); return $captcha; } public function _initView() { /* ビュークラスを作成 */ $view = new Codezine_Zend_View(); /* ビュークラスを設定 */ $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper( 'ViewRenderer'); $viewRenderer->setView($view); return $view; } }
リスト7の例では、2つのメソッドを追加しています。1つ目は「_initCaptcha」で2つ目は「_initView」です。それぞれ内容は単純で、_initCaptchaではZend_Captcha_Figletクラスのインスタンスを作成して返しており、また_initViewではCodezine_Zend_Viewクラスのインスタンスを作成してビューレンダラーに登録しています。
このように、作成したいリソースについて「_init(リソース名)」という名前のメソッドを定義して、その中でリソースを作成し、返すだけでブートストラップ内でのリソースの作成を行うことができます。
なお、Codezine_Zend_Viewはリスト8のように、実際は生のZend_Viewと同じ機能しか持っていません。
<?php class Codezine_Zend_View extends Zend_View { }
では、この作成したリソースはどのように利用するのでしょう? リスト7のうち、_initViewで作成されたリソースはビューレンダラーに登録されるため、自動的に利用されますが、_initCaptchaの方は別途アクションスクリプト内などで参照する必要があります。
ブートストラップクラス内で作成されたリソースは、ブートストラップクラスのgetResourceメソッドで取得することができます。ブートストラップクラスはフロントコントローラーの「bootstrap」という名前のメンバ変数に割り当てられているので、このことを利用してリソースを取得することにします。
(IndexController.php) class IndexController extends Zend_Controller_Action { public function indexAction() { $bootstrap = $this->getInvokeArg('bootstrap'); ←(1) $captcha = $bootstrap->getResource('captcha'); ←(2) $id = $captcha->generate();←(3) $this->view->assign('captcha', $captcha->render($this->view));←(4) ... (index.phtml) Bootstrap test. <?php echo $this->captcha ?>←(5)
手順としては、まず(1)でブートストラップクラスのインスタンスを取得しています。このgetInvokeArgメソッドは、アクションコントローラーからフロントコントローラーのメンバ変数を取得するためのものです。(2)でブートストラップクラスからリソース「captcha」を取得しています。(3)、(4)はCAPTCHAを生成したうえでその生成したCAPTCHAをビューの変数「captcha」に割り当てています。そして、(5)でそのCAPTCHAを表示しています。
これを実行した結果は図2のようになります