** Yii——组件注册 **:Yii的组件相当于Laravel的服务,同样需要注册到一个IOC容器中,以便在应用其他地方使用这些组件/服务
这相当与在laravel中,使用$app应用的register或者singleton方法注册服务,而在Yii中则称为服务定位器Service Locator。
注册组件
在Yii中,要注册组件(laravel中称之为服务)可以使用如下方式:
方法一:set方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| use yii\di\ServiceLocator; use yii\caching\FileCache; $locator = new ServiceLocator; $locator->set('cache', 'yii\caching\ApcCache'); $locator->set('db', [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=demo', 'username' => 'root', 'password' => '', ]); $locator->set('search', function(){ return new app\components\SolrService; }); $locator->set('pageCache', new FileCache);
|
方法二:在配置文件中配置
返回配置数组的方式,即在应用的配置文件中配置components项
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| return [ 'components' => [ 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=demo', 'username' => 'root', 'password' => '', ], 'cache' => 'yii\caching\ApcCache', 'search' => function() { return new app\components\SolrService; }, ], ];
|
请谨慎注册太多应用组件,应用组件就像全局变量,使用太多可能加大测试和维护的难度。 一般情况下可以在需要时再创建本地组件。
使用/访问 组件
通过访问上面注册时的名字/ID 来访问,两种方式,get(‘name/id’)和属性
$cache = $locator->get(‘cache’);
$cache = $locator->cache;//通过属性
检查是否注册某个组件
$locator->has(‘name’);