【问题标题】:Yii dependency injection basicYii 依赖注入基础
【发布时间】: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();

    ....
}

所以我的两个问题是:

  1. 正如您在上面看到的,我在这些函数中使用相同的模型。最好将它们初始化为“public function init() {}”,然后在全局所有类中使用它们,否则这是个坏主意?

  2. 我认为如果将这些模型注入到这个控制器中应该会更好,对吧?如何正确做?

我创建了文件 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


    【解决方案1】:
    1. 保留DRY 总是一个好主意。这些类看起来非常相关,所以我建议通过创建一个新模型来明确这种关系(例如ProductsInfo)。可以相应地命名控制器 (ProductsInfoController),从而明确应用程序结构。

    2. 谨慎使用依赖注入。如果有不同的方式,请改用它。 DI 不适合所描述的用例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多