有人可以解释我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');
但这是个坏主意,对吧?
请回答我的两个问题。 :)
谢谢!
答案 0 :(得分:0)
保持事物DRY始终是个好主意。这些类似乎非常相关,所以我建议通过创建一个新模型(例如ProductsInfo
)来明确这种关系。可以相应地命名控制器(ProductsInfoController
),从而澄清应用程序结构。
谨慎使用依赖注入。如果有不同的方式,请改用它。 DI并不适合所描述的用例。