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 回答