2

Cakephp の子コントローラーでコンストラクターを継承/オーバーライドできるかどうか疑問に思っています。

私のAppController.phpで

私はそれを次のように持っています:

public function __construct( $request = null, $response = null ) {
    parent::__construct( $request, $response );

    $this->email = new CakeEmail();

    $this->_constants = array();
    $this->_constants['some_var'] = $this->Model->find( 'list', array(
        'fields' => array( 'Model.name', 'Model.id' )
    ) );
}

そして私の子コントローラーSomeController.phpでは、親コンストラクターを継承します

public function __construct( $request = null, $response = null ) {
    parent::__construct( $request, $response );
}

$this->email$this->_constants['some_var']にアクセスしようとすると、どちらも null です。しかし、コードを継承する代わりに SomeController.php に直接入れるとすぐに、それは機能しました。

私は何か間違ったことをしましたか、それともケーキには近づきませんか? また、関数beforeFilter()で同じことを試しましたが、同じことが起こりました。しかし、各コントローラーが独自のbeforeFilter()を持つことは理にかなっています。

4

1 に答える 1

4

_construct' function of the appController. That's what thebeforeFilter ,beforeRender`メソッドをオーバーライドしようとさえしません。appController から各コントローラーに変数を渡そうとしているようです。あなたはそのようにすることができます...

class AppController extends Controller {

   var $_constants = array();

   public function beforeFilter(){
      $this->_constants[] = array('this', 'that', 'the other');
   }

}

モデルのコントローラーでは、次のように変数にアクセスできます...

class UsersController extends AppController {

   public function add(){
      pr($this->_constants);
   }
}

変数をビューに(わずかに)送信しようとしている場合は、別の話です。set メソッドを使用するだけです

class AppController extends Controller {

   public function beforeFilter(){
      $this->set('_constants', array('this', 'that', 'the other'));
   }

}

_constantsどのビューでも、変数を で呼び出すことができますpr($_constants);。appController にあるため、すべてのビューで使用できるはずです。

于 2013-02-22T12:53:40.583 に答える