[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