Вызовите конструктор компонента в контроллере
Я написал компонент, как показано ниже.
class GoogleApiComponent extends Component {
function __construct($approval_prompt) {
$this->client = new apiClient();
$this->client->setApprovalPrompt(Configure::read('approvalPrompt'));
}
}
Я называю это в переменной $components переменной AppController. Тогда я написал UsersController, как показано ниже.
class UsersController extends AppController {
public function oauth_call_back() {
}
}
Поэтому в действии oauth_call_back я хочу создать объект GoogleApiComponent, а также вызвать конструктор с параметром. Как это сделать в CakePHP 2.1?
1 ответ
Решение
Вы можете передать значение 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'));
}
}
Я бы порекомендовал вам взглянуть на класс Component, который находится в CORE/lib/Controller/Component.php. Вы будете удивлены тем, что вы узнаете, когда будете читать исходный код.