2015-04-23 2 views
6

Qualcuno può indicarmi la direzione di un esempio pratico o di un tutorial utilizzando il contenitore DI in Yii2?Esempio di iniezione dipendenza Yii2

Devo essere grossa ma la guida 2.0 su questo argomento non mi è chiara. Inoltre, la maggior parte dei tutorial on-line e del codice di esempio che ho esaminato è costellata dal singleton Yii::$app, che rende difficile il test.

+1

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

+3

Perché non chiedi esattamente cosa non ti è chiaro? – Tahir

risposta

4

Per esempio si hanno classi \app\components\First e \app\components\Second implementa un'interfaccia \app\components\MyInterface

È possibile utilizzare il contenitore DI cambiare classe in un solo posto. Per esempio:

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

ora vi darà istanza di prima classe al momento della chiamata $container->get("\app\components\MyInterface");

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

ma ora possiamo impostare altra classe per questa interfaccia.

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

È possibile impostare le classi in un posto e l'altro codice utilizzerà automaticamente la nuova classe.

Here è possibile trovare una grande documentazione per questo modello in Yii con esempi di codice.

2

Questo è un semplice esempio per impostare di default le impostazioni del widget:

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