Yii 2 инициализировать компонент



Я хочу сделать то, что именно Yii2 делает с компонентом в файле config
в yii config:



'someComponent'=>
[
'class' => 'namespacetoclass',
'param1' => 'somevalue',
'param2' => 'somevalue',
]


Как я могу сделать то, что Yii делает в моем собственном классе, дать ему массив файла компонента, а затем мой класс создать и экземпляр и инициализировать его?



Правка:



Конфигурационный файл:



'payment' => [
'class' => 'backendmodulespaymentBank',
'components' => [
'service' => [
'class' => 'backendmodulespaymentcomponentsService',
'adaptors'=>[
'BankMeli' => [
'class'=>'backendmodulespaymentadaptorsBankMeli',
'test'=>'1',
]
]
],
],
],


Компонент Обслуживания:



namespace backendmodulespaymentcomponents;

use Yii;
use yiibaseComponent;

class Service extends Component
{
public $adaptors = [];
public function init()
{
parent::init();
$adaptors = new stdClass();
foreach($this->adaptors as $key=>$adaptor)
{
$class = $adaptor['class'];
unset($adaptor['class']);
$adaptors->$key = Yii::createObject($class,$adaptor);
}
$this->adaptors = $adaptors;
}

public function run()
{

}
}


Внутренний компонент (BankMeli), который нужно инициализировать:



namespace backendmodulespaymentadaptors;


use Yii;
use yiibaseComponent;

class BankMeli extends Component
{
public $test;

public function __construct($config = [])
{
parent::__construct($config);
}
public function init(){
parent::init();
}
}


Var_dump (service->adapters) вывод:



object(stdClass)[61]
public 'BankMeli' =>
object(backendmodulespaymentadaptorsBankMeli)[72]
public 'test' => null
private '_events' (yiibaseComponent) =>
array (size=0)
empty
private '_behaviors' (yiibaseComponent) => null




Решено:



I передал массив param в другой массив и проблема решена:



$adaptors->$key = Yii::createObject($class,[$adaptor]);
763   1  

1 ответ:

С помощью Yii::createObject() yii2 создал компонентный объект с конфигурацией в конфигурационном файле. Это примерно так:

Yii::createObject($config['class'], $config['otherParamsWithoutClass']);

Все, что в yii2 расширяет класс Object, в конструкторе мы можем ввести параметры конфигурации. param1 и param2 должны быть общедоступными свойствами, или модель должна иметь геттер и сеттер.

public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

Comments

    Ничего не найдено.