5.9. Zend_ControllerでS2Containerを使用する

5.9.1. 動作環境

  • PHP-5.3.2
  • Zend Framework v1.10.2
  • s2container.php-2.0.3

5.9.2. プロジェクトの作成

Zend_Tool_Frameworkを使用しプロジェクトディレクトリを作成します。その後、s2container.phpを利用するための設定を追加します。
次のSVNリポジトリに今回作成したプロジェクトディレクトリがあります。


5.9.3. S2Containerの設定

Zend_Tool_Frameworkで作成したプロジェクトにs2container.phpを利用するための設定を追加します。

s2.phpの作成. 

s2container.phpの設定を行うs2.phpをapplication/configsディレクトリに作成します。


S2ActionHelperの作成. 

アクションメソッド内でS2Containerにアクセスするアクションヘルパーを作成します。


Bootstrap.phpの編集. 

アプリケーションのBootstrapでS2ActionHelperを利用する設定を行います。(_initActionHelperメソッド)


varディレクトリの作成. 

ログファイル、セッションファイル、キャッシュなどを保存するためのvarディレクトリを作成します。


5.9.4. アクションメソッドでS2Containerを利用する

アクションメソッド内でS2Containerのコンポーネントを利用する場合は、S2ActionHelper経由でS2Containerにアクセスします。

    public function addAction()
    {
        $this->_helper->viewRenderer->setNoRender();
        echo $this->_helper->s2('Service_Calc')->add(1, 2);
    }

Service_Calcクラス をapplication/servicesディレクトリに作成します。
アクションメソッド内からS2Containerへのアクセスは、S2ActionHelperのプロパティ経由でもアクセスすることができます。 プロパティとして指定した名前がコンポーネント名になります。

    public function add2Action()
    {
        $this->_helper->viewRenderer->setNoRender();
        echo $this->_helper->s2->calc->add(1, 2);
    }

上記の場合は"calc"と名前の付いたコンポーネントがS2Containerから取り出されます。 ただし、S2Containerからコンポーネント名でコンポーネントを取得する場合は、 あらかじめS2Containerにコンポーネントが登録されている必要があります。 S2ActionHelperは、各アクション毎にS2Containerを構築するための設定ファイルを読み込むことができます。 設定ファイルは、モジュールディレクトリのdiconsディレクトリに、"コントローラ名/アクション名.php"というファイルです。 上記の場合は、次のファイルがadd2アクションの設定ファイルになります。


5.9.5. コンポーネントのUnitTest

UnitTestはtestsディレクトリに作成します。 tests/application/bootstrap.php で、Zend_Applicationのbootstrapメソッドを実行し、アプリケーション環境を構築します。 Service_CalcクラスのUnitTestは、tests/application/servicesディレクトリCalcTest.php として作成します。 Service_CalcTestクラスでは、setUpメソッドでテスト対象のサービスコンポーネントをS2Contaienr経由で取得しています。

class Service_CalcTest extends PHPUnit_Framework_TestCase {

    public function testAdd() {
        $this->assertEquals(3, $this->service->add(1, 2));
    }

    public function setUp() {
        s2init();
        $this->service = s2get('Service_Calc');
    }

    public function tearDown() {
        $this->service = null;
    }
}

UnitTestの実行結果は次のなります。

% cd tests
% cat phpunit.xml
<phpunit bootstrap="application/bootstrap.php"/>
% phpunit application/services/CalcTest.php
PHPUnit 3.4.2 by Sebastian Bergmann.

.

Time: 0 seconds

OK (1 test, 1 assertion)
%


© Copyright The Seasar Foundation and the others 2005-2010, all rights reserved.