Yii:如何在配置文件中将组件定义为对象数组?

时间:2013-04-25 22:41:57

标签: yii yii-components

如何在main.cpp配置文件中将应用程序组件属性设置为对象数组?

在main.php配置文件的components部分中,我们有一个部分:

   'components' => array(
       ....
       'company' => array(
           'class' => 'application.components.Company',
           'employees' => array(
               'class' => 'application.components.Employee'
           )
       )
   );

但$ company-> employees属性只是设置为'application.components.Employee'.. 我原以为它等于array(new Employee)(即数组中的Employee对象)。

关于此事的任何知识?

2 个答案:

答案 0 :(得分:0)

您需要在此处使用标准PHP表示法,而不是Yii的class说明符,因为您只是将分配给组件成员var employees:< / p>

'company' => array(
    'class' => 'application.components.Company',
    'employees' => array(new Employee())
)
那说,为什么这样呢?只需在公司类的构造函数或employee方法中初始化init

答案 1 :(得分:0)

所以你似乎想要为你的自定义对象使用Yii的对象初始化逻辑,对吧? 这样的事情可能有所帮助:

class Company extends CApplicatinoComponent
{
    private $_employees = array();
    public function setEmployees($value)
    {
        foreach($value as $config)
            $this->_employees[] = Yii::createComponent($config);
    }
    public function getEmployees()
    {
        return $this->_employees;
    }
}

当然你应该添加一些错误检查。但现在您可以将您的员工配置为:

'company' => array(
    'class' => 'Company',
    'employees' => array(
        array(
            'class' => 'Employee',
            'somePropertyOfEmployee' => 'bla',
        ),
        array(
            'class' => 'OtherEmployee',
            'otherProperty' => 'bla',
        ),
    ),
),