Class yii\di\ServiceLocator
ServiceLocator 实现 service locator。
要使用 ServiceLocator, 首先需要通过调用 set() 或 setComponents() 向定位器注册具有相应组件定义的组件 IDs。 然后你可以通过调用 get() 去检索具有指定 ID 的组件。 定位器将根据定义自动实例化和配置组件。
例如,
$locator = new \yii\di\ServiceLocator;
$locator->setComponents([
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'sqlite:path/to/file.db',
],
'cache' => [
'class' => 'yii\caching\DbCache',
'db' => 'db',
],
]);
$db = $locator->get('db'); // or $locator->db
$cache = $locator->get('cache'); // or $locator->cache
因为 yii\base\Module 从 ServiceLocator 继承,所以模型和应用程序都是服务定位器。 模块添加 tree traversal 用于服务解析。
关于 ServiceLocator 更多的细节和用法,请参阅 guide article on service locators。
公共属性
属性 | 类型 | 描述 | 被定义在 |
---|---|---|---|
$behaviors | yii\base\Behavior[] | List of behaviors attached to this component | yii\base\Component |
$components | array | The 组件定义列表或加载的组件实例(ID => definition or instance)。 | yii\di\ServiceLocator |
公共方法
方法 | 描述 | 被定义在 |
---|---|---|
__call() | Calls the named method which is not a class method. | yii\base\Component |
__clone() | This method is called after the object is created by cloning an existing one. | yii\base\Component |
__construct() | Constructor. | yii\base\BaseObject |
__get() | Getter 魔术方法。 重写此方法以支持访问诸如读取属性之类的组件。 | yii\di\ServiceLocator |
__isset() | 检查属性值是否为 null。 此方法通过检查是否已加载命名组件来覆盖父类的实现。 | yii\di\ServiceLocator |
__set() | Sets the value of a component property. | yii\base\Component |
__unset() | Sets a component property to be null. | yii\base\Component |
attachBehavior() | Attaches a behavior to this component. | yii\base\Component |
attachBehaviors() | Attaches a list of behaviors to the component. | yii\base\Component |
behaviors() | Returns a list of behaviors that this component should behave as. | yii\base\Component |
canGetProperty() | Returns a value indicating whether a property can be read. | yii\base\Component |
canSetProperty() | Returns a value indicating whether a property can be set. | yii\base\Component |
className() | Returns the fully qualified name of this class. | yii\base\BaseObject |
clear() | 从定位器移除组件。 | yii\di\ServiceLocator |
detachBehavior() | Detaches a behavior from the component. | yii\base\Component |
detachBehaviors() | Detaches all behaviors from the component. | yii\base\Component |
ensureBehaviors() | Makes sure that the behaviors declared in behaviors() are attached to this component. | yii\base\Component |
get() | 返回具有指定 ID 的组件实例。 | yii\di\ServiceLocator |
getBehavior() | Returns the named behavior object. | yii\base\Component |
getBehaviors() | Returns all behaviors attached to this component. | yii\base\Component |
getComponents() | 返回组件定义列表或已加载的组件实例。 | yii\di\ServiceLocator |
has() | 返回一个值,该值表示定位器是否具有指定的组件定义或是否已实例化该组件。
此方法根据 $checkInstance 的值返回不同的结果。 |
yii\di\ServiceLocator |
hasEventHandlers() | Returns a value indicating whether there is any handler attached to the named event. | yii\base\Component |
hasMethod() | Returns a value indicating whether a method is defined. | yii\base\Component |
hasProperty() | Returns a value indicating whether a property is defined for this component. | yii\base\Component |
init() | Initializes the object. | yii\base\BaseObject |
off() | Detaches an existing event handler from this component. | yii\base\Component |
on() | Attaches an event handler to an event. | yii\base\Component |
set() | 用定位器注册一个组件。 | yii\di\ServiceLocator |
setComponents() | 在定位器中注册一组组件定义。 | yii\di\ServiceLocator |
trigger() | Triggers an event. | yii\base\Component |
属性详情
The 组件定义列表或加载的组件实例(ID => definition or instance)。
方法详情
Getter 魔术方法。 重写此方法以支持访问诸如读取属性之类的组件。
public mixed __get($name) | ||
$name | string | 组件或属性名称 |
return | mixed | 命名的属性值 |
---|
检查属性值是否为 null。 此方法通过检查是否已加载命名组件来覆盖父类的实现。
public boolean __isset($name) | ||
$name | string | 属性名或事件名 |
return | boolean | 是否属性名为 null |
---|
从定位器移除组件。
public void clear($id) | ||
$id | string | 组件 ID |
public object|null get($id, $throwException = true) | ||
$id | string | 组件 ID(e.g. |
$throwException | boolean | 如果 |
return | object|null | 指定 ID 的组件。如果 |
---|---|---|
throws | yii\base\InvalidConfigException | 如果 |
返回组件定义列表或已加载的组件实例。
public array getComponents($returnDefinitions = true) | ||
$returnDefinitions | boolean | 是否返回组件定义而不是已加载的组件实例。 |
return | array | The 组件定义列表或加载的组件实例(ID => definition or instance)。 |
---|
返回一个值,该值表示定位器是否具有指定的组件定义或是否已实例化该组件。
此方法根据 $checkInstance
的值返回不同的结果。
- 如果
$checkInstance
为 false(default), 此方法将返回一个表示定位器是否具有指定组件定义的值。 - 如果
$checkInstance
为 true, 此方法会返回一个表示定位器是否已经实例化指定组件的值。
参见 set().
public boolean has($id, $checkInstance = false) | ||
$id | string | 组件 ID(e.g. |
$checkInstance | boolean | 是否应检查组件是否已共享和实例化。 |
return | boolean | 是否定位器具有指定的组件定义或已实例化组件。 |
---|
用定位器注册一个组件。
例如,
// 类名
$locator->set('cache', 'yii\caching\FileCache');
// 配置数组
$locator->set('db', [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
]);
// 匿名函数
$locator->set('cache', function ($params) {
return new \yii\caching\FileCache;
});
// 实例
$locator->set('cache', new \yii\caching\FileCache);
如果具有相同 ID 的组件定义已经存在,则将覆盖它。
public void set($id, $definition) | ||
$id | string | 组件 ID(e.g. |
$definition | mixed | 使用定位器注册的组件。 它可以是以下之一: |
throws | yii\base\InvalidConfigException | 如果定义是无效的配置数组抛出的异常 |
---|
在定位器中注册一组组件定义。
这是 set() 的批量版本。 参数应该是一个数组,其键是组件 IDs,并且值是相应的组件定义。
有关如何指定组件 IDs 和定义的更多详细信息,请参阅 set()。
如果具有相同 ID 的组件定义已经存在,则将覆盖它。
以下是注册两个组件定义的示例:
[
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'sqlite:path/to/file.db',
],
'cache' => [
'class' => 'yii\caching\DbCache',
'db' => 'db',
],
]
public void setComponents($components) | ||
$components | array | 组件定义或实例 |