Пример внедрения зависимости Yii2

Может ли кто-нибудь указать мне в сторону практического примера или учебника с использованием контейнера DI в Yii2?

Я должен быть толстым, но руководство 2.0 по этой теме мне просто не понятно. Кроме того, большинство онлайновых учебных пособий и примеров кода, которые я рассмотрел, намазаны синглоном Yii::$app, что затрудняет тестирование.

+6
23 апр. '15 в 22:13
источник поделиться
2 ответа

Например, у вас есть классы \app\components\First и \app\components\Second реализует один интерфейс \app\components\MyInterface

Вы можете использовать контейнер DI для изменения класса только в одном месте. Например:

class First  implements MyInterface{
    public function test()
    {
        echo "First  class";
    }
}
class Second implements MyInterface {
    public function test()
    {
        echo "Second  class";
    }
}

$container= new \yii\di\Container();
$container->set ("\app\components\MyInterface","\app\components\First");

Теперь вы указываете экземпляр первого класса при вызове $container->get("\app\components\MyInterface");

$obj = $container->get("\app\components\MyInterface");
$obj->test(); // print "First  class"

Но теперь мы можем установить для этого класса другой класс.

$container->set ("\app\components\MyInterface","\app\components\Second");
$obj = $container->get("\app\components\MyInterface");
$obj->test(); // print "Second class"

Вы можете установить классы в одном месте, а другой - автоматически использовать новый класс.

Здесь вы можете найти отличную документацию для этого шаблона в Yii с примерами кода.

+4
22 сент. '15 в 21:57
источник

Это простой пример для установки настроек виджета по умолчанию:

        // Gridview default settings
        $gridviewSettings = [
            'export' => false,
            'responsive' => true,
            'floatHeader' => true,
            'floatHeaderOptions' => ['scrollingTop' => 88],
            'hover' => true,
            'pjax' => true,
            'pjaxSettings' => [
                'options' => [
                    'id' => 'grid-pjax',
                ],
            ],
            'resizableColumns' => false,
        ];

        Yii::$container->set('kartik\grid\GridView', $gridviewSettings);
+2
30 сент. '15 в 14:16
источник

Посмотрите другие вопросы по меткам или Задайте вопрос