【发布时间】:2015-04-23 19:12:22
【问题描述】:
谁能解释一下 DI 基础知识吗?我明白它是什么,但我现在真的不知道如何在实践中使用 DI 容器。例如,我在同一个控制器中有 2 个函数:
public function actionIndex()
{
$productsModel = new Products();
$productsFormModel = new ProductsForm();
$informationFormModel = new InformationForm();
....
}
public function actionInformation()
{
$productsModel = new Products();
$productsFormModel = new ProductsForm();
$informationFormModel = new InformationForm();
....
}
所以我的两个问题是:
正如您在上面看到的,我在这些函数中使用相同的模型。最好将它们初始化为“public function init() {}”,然后在全局所有类中使用它们,否则这是个坏主意?
我认为如果将这些模型注入到这个控制器中应该会更好,对吧?如何正确做?
我创建了文件 DI.php,我将其包含在入口脚本中。文件内容为:
<?php
\Yii::$container->set('products_model', 'app\models\Products');
\Yii::$container->set('products_form', 'app\models\ProductsForm');
\Yii::$container->set('information_form', 'app\models\InformationForm');
?>
所以我能够全局获取类 app\models\Products 实例(在每个控制器、视图或模型中):
$instance_products = \Yii::$container->get('products_model');
$instance_products_form = \Yii::$container->get('products_form');
$instance_information_form = \Yii::$container->get('information_form');
但这是个坏主意,对吧?
请回答我的两个问题。 :)
谢谢!
【问题讨论】:
标签: yii dependency-injection dependencies