cakePHP - 如何有条件地将组件加载到控制器中?

时间:2010-08-03 09:08:49

标签: cakephp

我正在http://www.webtechnick.com使用cakephp 1.3的优秀Facebook插件。这就是我现在所拥有的:

class UsersController extends AppController {
    var $name = 'Users';
    var $components = array('Facebook.Connect');

    function beforeFilter {
        $this->set('facebookUser', $this->Connect->user());
    }
}

但我想有条件地加载Facebook.Connect组件,并在控制器中使用它 - 在sudocode中就像这样......

if ($thisIsTrue) {
    Load_the_component_and_make_it_ready_for_use;
    $this->set('facebookUser', $this->Connect->user());
}

我该怎么做?

5 个答案:

答案 0 :(得分:5)

如果你在CakePHP 2.0中这样做,那真的很容易。我发现这个SO线程最初让我气馁,但它必须是1.3及更低的问题。例如:

public function beforeFilter(){
    parent::beforeFilter();
    $this->Paypal = $this->Components->load('Paypal');
}

这就是她写的全部内容。

答案 1 :(得分:4)

由于在使用控制器加载时初始化了Component,我不建议稍后加载它。

像maggie所评论的那样你可以加载组件(http://book.cakephp.org/view/939/Loading-Components)但是你必须调用启动并自己初始化并将对象附加到控制器上。

总而言之,让$ this->设置...条件并让每次加载组件可能更容易。

答案 2 :(得分:3)

除非我在这里缺少某些内容,否则您可以使用App :: import导入组件。

我听说你不想用模特做这件事,因为幕后还有其他的设置。但组件应该没问题。

if( $condition ) {
 App::import( 'Component', 'MyComponent' );
 $this->MyComponent = new MyComponent();
 $this->MyComponent->method();
}

HTH, 特拉维斯

答案 3 :(得分:2)

答案 4 :(得分:0)

在您的控制器中尝试此操作

var $components = array("Email", "Session", 'RequestHandler', 'Cookie');