レジストリークラスは、指定されたオブジェクト型のロードされたインスタンスの、 作成および取得する簡単な方法を提供します。 コンポーネント、ヘルパー、タスク、およびビヘイビアーのレジストリークラスがあります。
以下の例ではコンポーネントを使用しますが、コンポーネントに加えて、ヘルパー、ビヘイビアー、 およびタスクに同じ動作を期待することができます。
オブジェクトはその場で add<レジストリーオブジェクト>() でロードすることができます。 例:
$this->loadComponent('Acl.Acl');
$this->addHelper('Flash')
これは、 Acl
プロパティーと Flash
ヘルパーをロードしています。
設定も同様に、その場で行なうことができます。例:
$this->loadComponent('Cookie', ['name' => 'sweet']);
提供される任意のキーと値は、コンポーネントのコンストラクターに渡されます。このルールの唯一の例外は、
className
です。クラス名は、レジストリーのエイリアスオブジェクトに使用される特殊なキーです。
これは、クラス名を反映していないコンポーネント名を持つことができ、コアコンポーネントを拡張する際に
役立ちます。
$this->Auth = $this->loadComponent('Auth', ['className' => 'MyCustomAuth']);
$this->Auth->user(); // 実態は MyCustomAuth::user();
コールバックは、レジストリーオブジェクトによって提供されていません。 アプリケーションのすべてのイベント/コールバックをディスパッチするために events system を使用する必要があります。
以前のバージョンでは、コレクションオブジェクトは、コールバックを受けるオブジェクトを無効にする
disable()
メソッドを提供していました。
現在、これを実現するためには、イベントシステムの機能を使用する必要があります。
たとえば、次のようにコンポーネントのコールバックを無効にすることができます。
// Auth コールバックを無効化
$this->getEventManager()->off($this->Auth);
// Auth コールバックを再度有効化
$this->getEventManager()->on($this->Auth);