SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend Framework入門

RADツールによるPHPアプリケーション速効開発
- Zend_Application -

Zend Frameworkによる実践的なPHPアプリケーション開発 24


  • X ポスト
  • このエントリーをはてなブックマークに追加

ブートストラップ

 ブートストラップは、アプリケーションで利用するリソースを生成する手順です。このブートストラップはブートストラップクラスの中で行われます。

 なお、この記事の前の方で「Zend_Application_Boostrap」という名前を出しましたが、実際にはそのような名前のクラスは存在せず、図1のように2つのインターフェイスとそれを実装した抽象クラス、さらにそれを継承したクラスの4つの部品から成り立っています。

図1 Zend_Application_Bootstrapのクラス構造
図1 Zend_Application_Bootstrapのクラス構造

 このうち、主に利用するのは「Zend_Application_BootstrapBootstrap」クラスで、通常はこのクラスを継承して自分のブートストラップクラスを作成することになると思います。ただし、いくつかの重要なメソッドは「Zend_Application_Bootstrap_Abstract」クラス内で定義されているため、必要に応じてこちらのクラスも参照する必要があるかもしれません。

 このブートストラップクラス内では、リソースの作成を行っています。このリソースの作成を行うには

  1. ブートストラップクラス内のメソッドを利用
  2. リソースプラグインを利用

の2つの方法あります。

ブートストラップクラス内での生成

 1つ目はブートストラップクラスに「_init」から始まるメソッドを増やし、その中でリソースを生成する方法です。この方法を利用するためには、基本的には自分で「Zend_Application_BootstrapBootstrap」クラスを継承したクラスを作成し、その自作のクラス内に新しいメソッドを記述することになります(と言いつつも、今までもそうしてきましたが)。

 それでは例を見てみましょう。

[リスト7]ブートストラップクラス(Bootstrap.php)
<?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と同じ機能しか持っていません。

[リスト8]bootstrapの下のcodezine_zend_view.php
<?php
class Codezine_Zend_View extends Zend_View
{
}

 では、この作成したリソースはどのように利用するのでしょう? リスト7のうち、_initViewで作成されたリソースはビューレンダラーに登録されるため、自動的に利用されますが、_initCaptchaの方は別途アクションスクリプト内などで参照する必要があります。

 ブートストラップクラス内で作成されたリソースは、ブートストラップクラスのgetResourceメソッドで取得することができます。ブートストラップクラスはフロントコントローラーの「bootstrap」という名前のメンバ変数に割り当てられているので、このことを利用してリソースを取得することにします。

[リスト9]リソースの利用
(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のようになります

図2 実行した出力
図2 実行した出力

次のページ
おわりに

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Zend Framework入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4366 2009/10/16 11:54

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング