2016-04-03 16 views
0

Die CakePHP 3.0-Dokumentation enthält ein Beispiel für die Erstellung eines Ereignisses anhand eines Modells als Beispiel. Ich habe es ausprobiert und versucht und es übersetzt nicht für mich. Hat jemand ein CakePHP 3.x-Beispiel für die Verwendung eines benutzerdefinierten Ereignisses, bei dem ein Controller eine Variable im Controller setzt, die das Ereignis auslöst?CakePHP 3 Beispiel zur Implementierung eines Controller-Ereignisses

Antwort

2

Nehmen wir an, wir haben ein Admin-Dashboard, mit dem Sie Code in die Verwendung von Ereignissen einfügen können, damit Sie Ihre Plugins und nicht die Code-Dashboard-Funktionalität für bestimmte Plugins im Kern-Admin-Dashboard entkoppeln können.

Erstellen Sie die Auslösung des Ereignisses.

In APP/Controller/DashboardController

public function index() 
{ 
    // Once this gets to the function triggered by this event, the "$this" in the parameters will be $event->subject(). Mentioned again below. 
    $event = new Event('Controller.Dashboard.beforeDashboardIndex', $this) 
    $this->eventManager()->dispatch($event); 
    // your other index() code... 
} 

Jetzt ein Listener erstellen, die für wartet das Ereignis

Ein guter Ort dafür könnte sein, Plugin ausgelöst werden /src/Controller/Event/DashboardListener.php

namespace Plugin\Controller\Event; 

use Cake\Event\EventListenerInterface; 

class DashboardListener implements EventListenerInterface { 

    public function implementedEvents() { 
     return array(
      'Controller.Dashboard.beforeDashboardIndex' => 'myCustomMethod', 
     ); 
    } 

    public function myCustomMethod($event) { 
     // $event->subject() = DashboardController(); 
     $event->subject()->set('dashboardAddon', 'me me me'); 
    } 
} 

Endlich den Hörer einschalten. (Ex. Am unteren Rand des APP/config/bootstrap.php)

Hinweis kann diese Zuhörer Initialisierung überall sein, dass Brände vor DashboardController :: Index

// Attach event listeners 
use Cake\Event\EventManager; 
use PluginName\Controller\Event\DashboardListener; 
$myPluginListener = new DashboardListener(); 
EventManager::instance()->on($myPluginListener);