merci à tous
J'ai récemment appris symfony2, et maintenant je ne comprends plus le composant EventDispatcher, et la documentation officielle n'est pas très claire. . Résoudre
Vous connaissez jQuery ? Le mécanisme événementiel est toujours le même :
(1) Définissez d'abord le nom de l'événement
C'est comme le onclick de js, c'est juste une reconnaissance. Vous pouvez définir un nom d'événement tel que : supplier.my_event Pour plus de facilité d'utilisation, vous pouvez utiliser une classe « énumération » pour enregistrer ces événements :
.
final class Events
{
const MY_EVENT = 'vendor.my_event';
// 其他event……
}
Vous pouvez utiliser Events::MY_EVENT dans le code au lieu d'écrire directement la chaîne. Il n'est pas nécessaire de construire cette classe "énumération", mais il est recommandé :
Si vous faites une erreur, une erreur sera signalée directement pour faciliter le débogage
Centralisez-le pour une maintenance facile (sinon vous oublierez quels événements il y a)
(2) Définir une classe d'événement (définition du contexte)
En utilisant jQuery, nous ne définissons généralement pas nous-mêmes les classes d'événements, mais en fait cette classe d'événements existe également (celle par défaut est utilisée). Dans le rappel d'événement de jQuery, le premier paramètre accepté est l'objet de la classe d'événement, et cet objet. contiendra des éléments contextuels comme e.target.
À l'aide d'EventDispatcher de sf, vous définissez votre propre classe d'événement pour effectuer une vérification de type et fournir un contexte pour les rappels (en termes simples, quelles données peuvent être obtenues à partir de l'objet événement).
// 这个是sf为你提供的一个基础类
use Symfony\Component\EventDispatcher\Event;
// 你的事件类
class SomeEvent extends Event
{
public function __cosntruct()
{
// 按需定义你的事件类
}
}
(3) Événement déclencheur
Vous disposez d'un nom d'événement et d'une classe d'événement, et sf vous a déjà équipé d'un répartiteur d'événements. Vous pouvez l'utiliser directement pour déclencher des événements :
Vous connaissez jQuery ? Le mécanisme événementiel est toujours le même :
(1) Définissez d'abord le nom de l'événement
C'est comme le onclick de js, c'est juste une reconnaissance. Vous pouvez définir un nom d'événement tel que : supplier.my_event Pour plus de facilité d'utilisation, vous pouvez utiliser une classe « énumération » pour enregistrer ces événements :
.Vous pouvez utiliser Events::MY_EVENT dans le code au lieu d'écrire directement la chaîne. Il n'est pas nécessaire de construire cette classe "énumération", mais il est recommandé :
(2) Définir une classe d'événement (définition du contexte)
En utilisant jQuery, nous ne définissons généralement pas nous-mêmes les classes d'événements, mais en fait cette classe d'événements existe également (celle par défaut est utilisée). Dans le rappel d'événement de jQuery, le premier paramètre accepté est l'objet de la classe d'événement, et cet objet. contiendra des éléments contextuels comme e.target.
À l'aide d'EventDispatcher de sf, vous définissez votre propre classe d'événement pour effectuer une vérification de type et fournir un contexte pour les rappels (en termes simples, quelles données peuvent être obtenues à partir de l'objet événement).
(3) Événement déclencheur
Vous disposez d'un nom d'événement et d'une classe d'événement, et sf vous a déjà équipé d'un répartiteur d'événements. Vous pouvez l'utiliser directement pour déclencher des événements :
.(4) Définir un auditeur (rappel)
(5) Faites en sorte que le rappel écoute l'événement correspondant
Vous pouvez ajouter des rappels en utilisant le code :
Vous pouvez également utiliser la configuration, c'est-à-dire l'injection de dépendances (DIC) :