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
などのベースの関数のコンストラクタの中などで呼び出すようにすると良いでしょう。