5.11. SymfonyでS2Containerを使用する

5.11.1. Smfonyのスタートアップ

Symfonyで任意のプロジェクト、アプリケーション、モジュールを作成します。

5.11.2. S2Containerの設定

S2Container.phpをPEARでインストールします。フルパッケージでインストールする場合は、 プロジェクトディレクトリのlibディレクトリにS2Containerとして解凍します。 次のS2Containerの設定ファイルサンプルをプロジェクトディレクトリのconfigディレクトリにs2.phpとして保存します。

  • config/s2.php
<?php
require_once('S2Container/S2Container.php');

/** S2Log設定 */
seasar\Config::$LOG_LEVEL = seasar\log\impl\SimpleLogger::DEBUG;
seasar\Config::$DEBUG_EVAL = false;
seasar\Config::$DEBUG_VERBOSE = false;
seasar\Config::$SIMPLE_LOG_FILE = SF_ROOT_DIR . '/log/s2.log';

/** S2Aop設定 */
seasar\aop\Config::$CACHING = false;
seasar\aop\Config::$CACHE_DIR = SF_ROOT_DIR . '/cache/s2aop';

5.11.3. アクションの作成

モジュールの作成時に生成されるactions.class.phpを次のように編集します。

  • module/actions/actions.class.php
<?php
require_once(SF_ROOT_DIR . '/config/s2.php');
use seasar\container\S2ApplicationContext as s2app;
s2app::import(dirname(dirname(__FILE__)) . '/lib/logic');

class defaultActions extends sfActions {
    public function executeIndex() {
      $this->greeting = s2app::get('Hoge')->greeting();
    }
}
  1. s2.php共通設定ファイルを読み込みます。
  2. useを用いてS2ApplicationContextを別名で定義します。 (必須ではありません)
  3. Logicディレクトリをインポートします。
  4. アクションメソッドでHogeコンポーネントを使用します。getメソッドでコンポーネントを取得する場合は、 S2ApplicationContext内部で管理されるSingleton S2Containerが使用されます。

アクションクラスで使用するHogeクラスをモジュールディレクトリのlib/logicディレクトリに作成します。

  • module/lib/logic/Hoge.php
<?php
class Hoge {
    public function greeting() {
        return 'Hello World !!';
    }
}

indexアクションのテンプレートを編集します。

  • module/template/indexSuccess.php
greeting : <?php echo $greeting; ?> <br>

indexページにアクセスすると、「greeting : Hello World !!」と表示されます。

5.11.4. Mockを使用する

MockInterceptorをHogeクラスにアスペクトして、greetingメソッドの戻り値を設定します。

<?php
class Hoge {
    /**
     * @S2Aspect('interceptor' => 'new seasar\aop\interceptor\MockInterceptor')
     * @S2Mock('return' => 'strval("Bye World !!")')
     */
    public function greeting() {
        return 'Hello World !!';
    }
}

indexページにアクセスすると、「greeting : Bye World !!」と表示されます。

@S2Aspectアノテーションは、クラスに注釈することもできます。また、S2ApplicationContextの自動アスペクトを使用しても、 同様の結果を得ることができます。自動アスペクトを行う場合は、アクションクラスのS2ApplicationContext設定部に、 registerAspectメソッドを追記します。

<?php
require_once(SF_ROOT_DIR . '/config/s2.php');
use seasar\container\S2ApplicationContext as s2app;
s2app::import(dirname(dirname(__FILE__)) . '/lib/logic');
s2app::registerAspect('new seasar\aop\interceptor\MockInterceptor', '/^Hoge$/');

class defaultActions extends sfActions {
    public function executeIndex() {
      $this->greeting = s2app::get('Hoge')->greeting();
    }
}


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