Попытка создать компонент, который позволит использовать более одного платежного шлюза (да, я понимаю, что это было сделано раньше). Я создал ‘PaymentsComponent’ и некоторые специфичные для шлюза компоненты, которые расширяют его.
Проблема в том, что я не могу получить переменные, установленные / инициализированные в родительском компоненте, которые будут доступны в дочернем компоненте. Они доступны, но только со значением по умолчанию, а не со значением после инициализации. Что мне не хватает?
Внутри контроллера:
private function processPayment($requestData) {
$this->Payments = $this->Components->load('Payments');
$this->Payments->initialize($this);
debug($this->Payments->apiSecretKey); // shows: '123456789'
$result = $this->Payments->charge($requestData);
//...
}
PaymentsComponent
<?php
App::uses('Component', 'Controller');
class PaymentsComponent extends Component {
public $apiSecretKey = null;
public function initialize() {
$this->apiSecretKey = Configure::read('PaymentGateway.secret_key');
}
public function charge($data) {
$result = $this->Authnet->charge($data);
}
// ...
}
Компонент Authorize.net
class AuthNetComponent extends PaymentsComponent {
public $components = array('Session');
public function charge($data) {
debug($this->apiSecretKey); // shows: null
// ...
}
// ...
}
Задача ещё не решена.
Других решений пока нет …