AppManagerを使ってみるテスト

いままでお行儀の悪いEthnaアクションクラスの書き方をしていたので、一念発起してEthna_AppManagerを使ってみた。

参考→http://ethna.jp/ethna-document-dev_guide-appobj-manager.html

ドキュメントに言われるがままに、アプリケーションマネージャ追加して(ここでは、Sample_AppManagerとする)、Ethna_Controller派生クラスで

/** @var    array   アプリケーションマネージャ定義 */
var $manager = array(
    'AppManager' => 'App',
);

こんな風に定義して、

$man = $this->backend->getManager('AppManager');
$man->Foo();

こんな風に呼び出してみても、うんともすんとも言わないから、Ethna_ClassFactoryの動きを追ってみた。

む。なぞが解けた。

上の書き方ではダメで、直接マネージャ名を入れられるようになったのか。↓コレだけで良いみたいだ。

$man = $this->backend->getManager('App');
$man->Foo();

と、まあ、このことはドキュメントにも、この通り、書いてあった。悲しくなったorz

ドキュメントはちゃんと読みましょう。

Ethna 2.3.0 Preview2以降の挙動の変更について

Ethna 2.3.0 Preview2から、AppManagerの挙動が変化しました。 それまでのバージョンでは、Controllerに登録したManagerが自動的にロードされていたのですが、Ethna 2.3.0 Preview2以降においては、

$this->mymanager = $this->backend->getManager('マネージャの名前');

などして、自分でAppManagerを取得するようになりました。*2 各Action毎に毎回手動で呼び出すのが面倒な場合、

app/[APPID]_ActionClass.php

などのベースの関数のコンストラクタの中などで呼び出すようにすると良いでしょう。