类 BehaviorRegistry
BehaviorRegistry 用作加载行为的注册表,并处理行为对象的加载和构建。
此类还提供用于检查和分派行为方法的方法。
属性概述
-
$_eventClass protected
string
新事件对象的默认类名。
-
$_eventManager protected
Cake\Event\EventManagerInterface|null
Cake\Event\EventManager 的实例,此对象正在使用它来分派内部事件。
-
$_finderMap protected
array<string, array>
查找器方法映射。
-
$_loaded protected
array<string, object>
加载对象的映射。
-
$_methodMap protected
array<string, array>
方法映射。
-
$_table protected
Cake\ORM\Table
使用此注册表的表。
方法概述
-
__construct() public
构造函数
-
__debugInfo() public
调试友好的对象属性。
-
__get() public
为加载的对象提供公共读取访问权限
-
__isset() public
为 _loaded 提供 isset 访问权限
-
__set() public
设置一个对象。
-
__unset() public
取消设置一个对象。
-
_checkDuplicate() protected
检查重复的对象加载。
-
_create() protected
创建行为实例。
-
_getMethods() protected
获取行为方法并确保没有重复。
-
_resolveClassName() protected
解析行为类名。
-
_throwMissingClassError() protected
当行为丢失时抛出异常。
-
call() public
在行为上调用方法。
-
callFinder() public
在行为上调用查找器。
-
className() public static
解析行为类名。
-
count() public
返回加载对象的数目。
-
dispatchEvent() public
用于创建和分派事件的包装器。
-
get() public
获取加载的对象实例。
-
getEventManager() public
返回此对象的 Cake\Event\EventManager 管理器实例。
-
getIterator() public
返回一个数组迭代器。
-
has() public
检查是否加载了给定对象。
-
hasFinder() public
检查任何加载的行为是否实现了命名的查找器。
-
hasMethod() public
检查任何加载的行为是否实现了方法。
-
load() public
加载/构造对象实例。
-
loaded() public
获取加载对象的列表。
-
normalizeArray() public
将对象配置数组规范化为关联形式,以简化延迟加载。
-
reset() public
清除注册表中加载的实例。
-
set() public
通过名称将对象直接设置到注册表中。
-
setEventManager() public
返回此对象的 Cake\Event\EventManagerInterface 实例。
-
setTable() public
将表实例附加到此注册表。
-
unload() public
从注册表中删除对象。
方法详情
__construct() ¶ public
__construct(Cake\ORM\Table|null $table = null)
构造函数
参数
-
Cake\ORM\Table|null
$table optional 此注册表附加到的表。
__get() ¶ public
__get(string $name): object|null
为加载的对象提供公共读取访问权限
参数
-
string
$name 要读取的属性名称
返回
object|null
__isset() ¶ public
__isset(string $name): bool
为 _loaded 提供 isset 访问权限
参数
-
string
$name 正在检查的对象的名称。
返回
bool
__set() ¶ public
__set(string $name, object $object): void
设置一个对象。
参数
-
string
$name 要设置的属性名称。
-
object
$object 要设置的对象。
返回
void
_checkDuplicate() ¶ protected
_checkDuplicate(string $name, array<string, mixed> $config): void
检查重复的对象加载。
如果正在加载重复项且配置不同,则不好,将引发异常。
引发异常,因为替换对象不会更新其他对象可能具有的任何引用。此外,仅更新运行时配置不是一个好选择,因为我们可能缺少依赖于配置的重要构造函数逻辑。
参数
-
string
$name 注册表中别名的名称。
-
array<string, mixed>
$config 新实例的配置数据。
返回
void
抛出
Cake\Core\Exception\CakeException
当发现重复项时。
_create() ¶ protected
_create(object|string $class, string $alias, array<string, mixed> $config): Cake\ORM\Behavior
创建行为实例。
Cake\Core\ObjectRegistry::load() 的模板方法的一部分 已启用的行为将注册到事件管理器。
参数
-
object|string
$class 缺少的类名。
-
string
$alias 对象的别名。
-
array<string, mixed>
$config 用于行为的配置数组。
返回
Cake\ORM\Behavior
_getMethods() ¶ protected
_getMethods(Cake\ORM\Behavior $instance, string $class, string $alias): array
获取行为方法并确保没有重复。
使用 implementedEvents() 方法来排除回调方法。以 _
开头的将被忽略,Cake\ORM\Behavior 上声明的方法也将被忽略
参数
-
Cake\ORM\Behavior
$instance 要从中获取方法的行为。
-
string
$class 缺少的类名。
-
string
$alias 对象的别名。
返回
array
抛出
LogicException
当连接重复方法时。
_resolveClassName() ¶ protected
_resolveClassName(string $class): class-stringCake\ORM\Behavior>|null
解析行为类名。
Cake\Core\ObjectRegistry::load() 的模板方法的一部分
参数
-
string
$class 要解析的部分类名。
返回
class-stringCake\ORM\Behavior>|null
_throwMissingClassError() ¶ protected
_throwMissingClassError(string $class, string|null $plugin): void
当行为丢失时抛出异常。
Cake\Core\ObjectRegistry::load() 和 Cake\Core\ObjectRegistry::unload() 的模板方法的一部分
参数
-
string
$class 缺少的类名。
-
string|null
$plugin 缺少插件行为。
返回
void
抛出
Cake\ORM\Exception\MissingBehaviorException
call() ¶ public
call(string $method, array $args = []): mixed
在行为上调用方法。
参数
-
string
$method 要调用的方法。
-
array
$args optional 要调用方法时要使用的参数。
返回
mixed
抛出
BadMethodCallException
当方法未知时。
callFinder() ¶ public
callFinder(string $type, Cake\ORM\Query\SelectQuery<TSubject> $query, mixed ...$args): Cake\ORM\Query\SelectQuery<TSubject>
在行为上调用查找器。
参数
-
string
$type 要调用的查找器类型。
-
Cake\ORM\Query\SelectQuery<TSubject>
$query 要应用查找器选项的查询对象。
-
mixed
...$args 与查找器特定参数匹配的参数
返回
Cake\ORM\Query\SelectQuery<TSubject>
抛出
BadMethodCallException
当方法未知时。
className() ¶ public static
className(string $class): string|null
解析行为类名。
参数
-
string
$class 要解析的部分类名。
返回
string|null
dispatchEvent() ¶ public
dispatchEvent(string $name, array $data = [], TSubject|null $subject = null): Cake\Event\EventInterface<TSubject>
用于创建和分派事件的包装器。
返回已分发的事件。
参数
-
string
$name 事件的名称。
-
array
$data optional 您希望通过此事件传输的任何值,监听器都可以读取。
-
TSubject|null
$subject optional 此事件适用的对象(默认情况下为 $this)。
返回
Cake\Event\EventInterface<TSubject>
get() ¶ public
get(string $name): object
获取加载的对象实例。
参数
-
string
$name 对象名称。
返回
object
抛出
Cake\Core\Exception\CakeException
如果未加载或未找到。
getEventManager() ¶ public
getEventManager(): Cake\Event\EventManagerInterface
返回此对象的 Cake\Event\EventManager 管理器实例。
您可以使用此实例将任何新的监听器或回调注册到对象事件,或者创建您自己的事件并在需要时触发它们。
返回
Cake\Event\EventManagerInterface
hasFinder() ¶ public
hasFinder(string $method): bool
检查任何加载的行为是否实现了命名的查找器。
如果任何行为提供具有所选名称的公共方法,则返回 true。
参数
-
string
$method 要检查的方法。
返回
bool
hasMethod() ¶ public
hasMethod(string $method): bool
检查任何加载的行为是否实现了方法。
如果任何行为提供具有所选名称的公共非查找器方法,则返回 true。
参数
-
string
$method 要检查的方法。
返回
bool
load() ¶ public
load(string $name, array<string, mixed> $config = []): object
加载/构造对象实例。
如果注册表中已存在实例,则将返回该实例。如果子类提供事件支持,您可以使用 $config['enabled'] = false
将构造的对象从注册到事件中排除。
使用 {@link \Cake\Controller\Component::$components} 作为示例。您可以通过设置 'className' 键来为对象创建别名,即
protected $components = [
'Email' => [
'className' => 'App\Controller\Component\AliasedEmailComponent'
];
];
对 Email
组件的所有调用将使用 AliasedEmail
而不是。
参数
-
string
$name 要加载的对象的名称/类。
-
array<string, mixed>
$config optional 加载对象时要使用的其他设置。
返回
object
抛出
异常
如果找不到该类。
normalizeArray() ¶ public
normalizeArray(array $objects): array<string, array>
将对象配置数组规范化为关联形式,以简化延迟加载。
参数
-
array
$objects 要规范化的子对象数组。
返回
array<string, array>
set() ¶ public
set(string $name, object $object): $this
通过名称将对象直接设置到注册表中。
如果此集合实现事件,则传递的对象将附加到事件管理器
参数
-
string
$name 要设置在注册表中的对象的名称。
-
object
$object 要存储在注册表中的实例
返回
$this
setEventManager() ¶ public
setEventManager(Cake\Event\EventManagerInterface $eventManager): $this
返回此对象的 Cake\Event\EventManagerInterface 实例。
您可以使用此实例将任何新的监听器或回调注册到对象事件,或者创建您自己的事件并在需要时触发它们。
参数
-
Cake\Event\EventManagerInterface
$eventManager 要设置的事件管理器
返回
$this
setTable() ¶ public
setTable(Cake\ORM\Table $table): void
将表实例附加到此注册表。
参数
-
Cake\ORM\Table
$table 此注册表附加到的表。
返回
void
unload() ¶ public
unload(string $name): $this
从注册表中删除对象。
如果此注册表具有事件管理器,则对象也将从任何事件中分离。
参数
-
string
$name 要从注册表中删除的对象的名称。
返回
$this
属性详情
$_eventManager ¶ protected
Cake\Event\EventManager 的实例,此对象正在使用它来分派内部事件。
类型
Cake\Event\EventManagerInterface|null