<?php /** * Created by PhpStorm. * Date: 2016/5/25 * Time: 18:33 * 服务定位器依赖注入 */ namespace frontendcontrollers; use yii; use yiiwebController; use yiidiContainer; use yiidiServiceLocator; class DependencyinjectserviceController extends Controller{ public function actionIndex() { Yii::$container->set('frontendcontrollersDriver','frontendcontrollersManDriver'); $sl = new ServiceLocator(); $sl->set('Car',[ 'class'=>'frontendcontrollersCar', ]); $car = $sl->get('Car'); $car->run(); /* 'car' =>['frontendcontrollersDriver','frontendcontrollersManDriver'];可以配置在config components中 这时 Yii::$app->car->run();*/ /*板块2 * Yii::$container->set('frontendcontrollersDriver','frontendcontrollersManDriver'); Yii::$app->car->run(); */ } } interface Driver{ public function drive(); } class ManDriver implements Driver{ public function drive(){ echo "I am an old man!"; } } class Car{ private $driver = null; public function __construct(Driver $driver)//第20行实现接口传递 ,消除强依赖 { $this->driver = $driver; } public function run() { $this->driver->drive(); } }
config.php
<?php $config = [ 'components' => [//应用组件 'request' => [ // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 'cookieValidationKey' => 'fvfpjzSKyDScNsrOXvd8f8atT6CY0rVj', ], 'car' =>[ 'class'=>'frontendcontrollersCar' ], ], ]; if (!YII_ENV_TEST) { // configuration adjustments for 'dev' environment $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = [ 'class' => 'yiidebugModule', ]; $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = [ 'class' => 'yiigiiModule', ]; } return $config;