CakePHP 2.x の概念に近いコールバック メソッドを使用するよりも、リッスンできるイベントをディスパッチすることをお勧めします。
この本には、イベントに関する章があります。
具体的には、作業中のレイヤーを含む名前を使用して、新しいイベントをディスパッチする必要があります。
// Inside a controller
$event = new \Cake\Event\Event(
// The name of the event, including the layer and event
'Controller.Registration.stepFour',
// The subject of the event, usually where it's coming from, so in this case the controller
$this,
// Any extra stuff we want passed to the event
['user' => $userEntity]
);
$this->eventManager()->dispatch($event);
次に、アプリケーションの別の部分でイベントをリッスンできます。個人的には、ほとんどの場合、自分のsrc/Lib/Listeners
フォルダーに特定のリスナー クラスを作成するのが好きです。
namespace App\Lib\Listeners;
class RegistrationListener implements EventListenerInterface
{
public function implementedEvents()
{
return [
'Controller.Registration.stepOne' => 'stepOne'
'Controller.Registration.stepFour' => 'stepFour'
}
public function stepOne(\Cake\Event\Event $event, \Cake\Datasource\EntityInterface $user)
{
// Process your step here
}
}
次に、リスナーをバインドする必要があります。これを行うには、グローバル Event Manager インスタンスを使用して で行う傾向があるため、AppController
どこでもリッスンできますが、1 つのコントローラーだけで作業している場合は、RegistrationsController
その 1 つのコントローラーだけにアタッチすることをお勧めします。
おそらくあなたのAppController::initialize()
EventManager::instance()->on(new \App\Lib\RegistrationListener());
おそらくあなたのController::initialize()
$this->eventManager()->on(new \App\Lib\RegistrationListener())