我正在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());
}
我该怎么做?
答案 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');