注册对象

注册类提供了一种简单的方法来创建和检索给定对象类型的已加载实例。 组件、助手、任务和行为都有注册类。

虽然下面的例子将使用组件,但同样的行为也可以在组件之外应用到助手、行为和任务。

加载对象

可以使用 add<registry-object>() 例子加载对象。

$this->loadComponent('Acl.Acl');
$this->addHelper('Flash')

这将导致 Acl 属性和 Flash 助手被加载。 配置也可以在运行时设置。 例子

$this->loadComponent('Cookie', ['name' => 'sweet']);

提供的任何键值对都将传递给组件的构造函数。 唯一的例外是 className。 类名是一个特殊的键,用于在注册表中为对象创建别名。 这使你可以拥有不反映类名的组件名称,当扩展核心组件时这很有用。

$this->Flash = $this->loadComponent('Flash', ['className' => 'MyCustomFlash']);
$this->Flash->error(); // Actually using MyCustomFlash::error();

触发回调

注册对象不提供回调。 你应该使用 事件系统 来调度应用程序的任何事件/回调。

禁用回调

在以前的版本中,集合对象提供了一个 disable() 方法来禁用对象接收回调。 你现在应该使用事件系统中的功能来实现这一点。 例如,你可以用以下方式禁用组件回调

// Remove MyComponent from callbacks.
$this->getEventManager()->off($this->MyComponent);

// Re-enable MyComponent for callbacks.
$this->getEventManager()->on($this->MyComponent);