Yii 2 初始化组件
Yii 2 initialize component
我想做 Yii2 对 config
文件中的组件所做的事情
在 yii config
:
'someComponent'=>
[
'class' => '\namespace\to\class',
'param1' => 'somevalue',
'param2' => 'somevalue',
]
我如何在我自己的 class 中做 Yii,给它一个组件文件数组,然后我的 class 创建和实例化它并初始化它?
编辑:
配置文件:
'payment' => [
'class' => 'backend\modules\payment\Bank',
'components' => [
'service' => [
'class' => 'backend\modules\payment\components\Service',
'adaptors'=>[
'BankMeli' => [
'class'=>'backend\modules\payment\adaptors\BankMeli',
'test'=>'1',
]
]
],
],
],
服务组件:
namespace backend\modules\payment\components;
use Yii;
use yii\base\Component;
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 backend\modules\payment\adaptors;
use Yii;
use yii\base\Component;
class BankMeli extends Component
{
public $test;
public function __construct($config = [])
{
parent::__construct($config);
}
public function init(){
parent::init();
}
}
var_dump(服务->适配器)输出:
object(stdClass)[61]
public 'BankMeli' =>
object(backend\modules\payment\adaptors\BankMeli)[72]
public 'test' => null
private '_events' (yii\base\Component) =>
array (size=0)
empty
private '_behaviors' (yii\base\Component) => null
已解决:
我在另一个数组中传递了参数数组,问题解决了:
$adaptors->$key = Yii::createObject($class,[$adaptor]);
使用 Yii::createObject()
yii2 在配置文件中创建了带有配置的组件对象。是这样的:
Yii::createObject($config['class'], $config['otherParamsWithoutClass']);
yii2 中的任何扩展 Object
class,在构造函数中我们可以输入配置参数。 param1
和 param2
应该是 public 属性,或者模型应该有 getter 和 setter。
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
$this->init();
}
我想做 Yii2 对 config
文件中的组件所做的事情
在 yii config
:
'someComponent'=>
[
'class' => '\namespace\to\class',
'param1' => 'somevalue',
'param2' => 'somevalue',
]
我如何在我自己的 class 中做 Yii,给它一个组件文件数组,然后我的 class 创建和实例化它并初始化它?
编辑:
配置文件:
'payment' => [
'class' => 'backend\modules\payment\Bank',
'components' => [
'service' => [
'class' => 'backend\modules\payment\components\Service',
'adaptors'=>[
'BankMeli' => [
'class'=>'backend\modules\payment\adaptors\BankMeli',
'test'=>'1',
]
]
],
],
],
服务组件:
namespace backend\modules\payment\components;
use Yii;
use yii\base\Component;
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 backend\modules\payment\adaptors;
use Yii;
use yii\base\Component;
class BankMeli extends Component
{
public $test;
public function __construct($config = [])
{
parent::__construct($config);
}
public function init(){
parent::init();
}
}
var_dump(服务->适配器)输出:
object(stdClass)[61]
public 'BankMeli' =>
object(backend\modules\payment\adaptors\BankMeli)[72]
public 'test' => null
private '_events' (yii\base\Component) =>
array (size=0)
empty
private '_behaviors' (yii\base\Component) => null
已解决:
我在另一个数组中传递了参数数组,问题解决了:
$adaptors->$key = Yii::createObject($class,[$adaptor]);
使用 Yii::createObject()
yii2 在配置文件中创建了带有配置的组件对象。是这样的:
Yii::createObject($config['class'], $config['otherParamsWithoutClass']);
yii2 中的任何扩展 Object
class,在构造函数中我们可以输入配置参数。 param1
和 param2
应该是 public 属性,或者模型应该有 getter 和 setter。
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
$this->init();
}