2015-04-23 8 views
6

Czy ktoś może wskazać mi konkretny przykład lub samouczek, używając kontenera DI w Yii2?Przykład wstrzyknięcia zależności Yii2

Muszę być gęsty, ale przewodnik 2.0 na ten temat nie jest dla mnie tak oczywisty. Ponadto, większość samouczków on-line i przykładowy kod, który sprawdziłem, jest usiana singletonem Yii::$app, co utrudnia testowanie.

+1

http://www.yiiframework.com/doc-2.0/guide-concept-di-container.html#registering-dependencies –

+3

Dlaczego nie pytasz dokładnie, co nie jest dla ciebie jasne? – Tahir

Odpowiedz

4

Na przykład masz zajęcia \app\components\First i \app\components\Second realizuje jeden interfejs \app\components\MyInterface

można użyć DI pojemnik zmienić klasę tylko w jednym miejscu. Na przykład:

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"); 

Teraz dajesz wystąpienie pierwszej klasy podczas wywoływania $container->get("\app\components\MyInterface");

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

Ale teraz możemy ustawić inną klasę dla tego interfejsu.

Możesz ustawić klasy w jednym miejscu, a inny kod automatycznie użyje nowej klasy.

Here można znaleźć wspaniałą dokumentację dla tego wzoru w Yii z przykładami kodu.

2

jest to prosty przykład, aby ustawić domyślne ustawienia widgetów:

 // 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);