0

app_controller.php 内

 var $components = array('Session', 'Component1', 'Component2');

$this->params['prefix'] == adminの場合のみ、 すべてのコンポーネントのロードを回避したい

var $components = array('Session');

そこで十分です..

どうやってするの ?

特定のコントローラーメソッドのコンポーネントをロードしないことは可能ですか?

class PagesController extends AppController
{

    function search()
    {
    // avoid loading  of components ('Component1' and  'Component2') here which is loaded in app_controller  '$components' array
    }
4

1 に答える 1

0

次に、コンストラクターをオーバーライドできます(情報がすぐに利用可能になっている場合)。

public function __construct(CakeRequest $request = null, CakeResponse $response = null) {
    if ($this->params['prefix'] == 'admin') {
        $this->components[] = 'Session';
    }
    parent::__construct($request, $response);
}

しかし、IMOは、管理者専用のセッションコンポーネントを含めるのはちょっとばかげています(これをプログラムするためのオーバーヘッドは、それを実行することで得られるものをはるかに超えているため)

PS:手動(そしておそらくよりクリーンな)方法もあります:

public function beforeFilter(){
    parent::beforeFilter();
    if ($this->params['prefix'] == 'admin') {
        $this->Session = $this->Components->load('Session');
    }
}
于 2012-05-28T08:44:48.017 に答える