[Ethna] AppManagerの$afがnullになる問題
ActionFormで、
public function setFormDef_PreHelper()
{
$userManager = $this->backend->getManager('user');
$userManager->foo();
}
などとした場合、userマネジャーのプロパティafはnullになります。($userManager->af = null)マネジャーは一種のシングルトンなので、 この後アクションクラスやビュークラスからuserマネジャーを呼び出した場合、$userManagerのafはnullのままです。
ActionClassで、
public function perform()
{
$userManager = $this->backend->getManager('user');
$userManager->doSomething(); // マネジャー内ではafがnullのままである。
}
うっかりマネジャー内で$this->afなどとしてしまうと、バグの原因になります。原因
Ethna_Controllerの_trigger_WWWメソッドの中で、$backendにafをセットするタイミングが遅いことが原因です。 $form_name = $this->getActionFormName($action_name);
$this->action_form = new $form_name($this);
$this->action_form->setFormDef_PreHelper(); // この時点で、$backend->afはnull
$this->action_form->setFormVars();
$backend->setActionForm($this->action_form);
対処方法
_trigger_WWWメソッドを修正する(またはオーバーライドして修正する)修正前
$form_name = $this->getActionFormName($action_name);
$this->action_form = new $form_name($this);
$this->action_form->setFormDef_PreHelper();
$this->action_form->setFormVars();
$backend->setActionForm($this->action_form);
↓
修正後
$form_name = $this->getActionFormName($action_name);
$this->action_form = new $form_name($this);
$backend->setActionForm($this->action_form);
$this->action_form->setFormDef_PreHelper();
$this->action_form->setFormVars();
たぶん悪影響などはないと思いますが、「こうした方がよい」などご意見・ご指摘いただけると幸いです。
カテゴリ:
Ethna