0

我写了一个组件如下。

class GoogleApiComponent extends Component {
    function __construct($approval_prompt) {
        $this->client = new apiClient();
        $this->client->setApprovalPrompt(Configure::read('approvalPrompt'));
    }
}

我在 AppController 的 $components 变量中调用它。然后我写了UsersController如下。

class UsersController extends AppController {
    public function oauth_call_back() {

    }
}

因此,在 oauth_call_back 操作中,我想创建 GoogleApiComponent 的对象,并使用参数调用构造函数。如何在 CakePHP 2.1 中做到这一点?

4

1 回答 1

3

您可以将 Configure::read() 值作为设置属性传递,或者将构造函数逻辑放在组件的 initialize() 方法中。

class MyComponent extends Component
{
    private $client;

    public function __construct (ComponentCollection $collection, $settings = array())
    {
        parent::__construct($collection, $settings);
        $this->client = new apiClient();
        $this->client->setApprovalPrompt ($settings['approval']);
    }
}

然后在你的 UsersController 中写下这个:

public $components = array (
    'My'    => array (
        'approval' => Configure::read('approvalPrompt');
    )
);

或者您可以这样编写组件:

class MyComponent extends Component
{
    private $client;

    public function __construct (ComponentCollection $collection, $settings = array())
    {
        parent::__construct($collection, $settings);
        $this->client = new apiClient();
    }

    public function initialize()
    {
        $this->client->setApprovalPrompt (Configure::read('approvalPrompt'));
    }
}

我建议您查看 CORE/lib/Controller/Component.php 中的 Component 类。当您阅读源代码时,您会惊讶于您将学到的东西。

于 2012-08-06T13:49:26.797 回答