Вызовите конструктор компонента в контроллере

Я написал компонент, как показано ниже.

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. Вы будете удивлены тем, что вы узнаете, когда будете читать исходный код.

Другие вопросы по тегам