Questions & Feedback
Found a typo or an error?
Want to improve this document? Edit it.
Need support or have a technical question?
Post to the user mailing-list.
Master Symfony2 fundamentals
Symfony hosting done right
Discover the SensioLabs Support
Oggetto evento generico
Oggetto evento generico¶
New in version 2.1: La classe GenericEvent è stata aggiunta in Symfony 2.1
La classe base Event fornita dal
componente Event Dispatcher è deliberatamente breve, per consentire la creazione
di oggetti evento con API specifiche, usando l'ereditarietà. Questo consente un codice
elegante e leggibile, anche in applicazioni complesse.
La classe GenericEvent è disponibile
per comodità per chi volesse usare un solo oggetto evento in tutta la propria
applicazione. È adatta alla maggior parte degli scopi, senza modifiche, perché segue
il pattern observer standard, in cui gli oggetti evento incapsulano il soggetto ("subject")
di un evento, ma anche alcuni parametri in
più.
GenericEvent ha una semplice API, in
aggiunta alla classe base Event
__construct(): il costruttore accetta il soggetto dell'evento e qualsiasi parametro;getSubject(): restituisce il soggetto;setArg(): imposta un parametro per chiave;setArgs(): imposta un array di parametri;getArg(): restituisce un parametro per chiave;getArgs(): restituisce un array di parametri;hasArg(): restituiscetruese il parametro esiste;
GenericEvent implementa anche ArrayAccess sui parametri dell'evento,
il che lo rende molto utile per passare parametri ulteriori, che riguardino il soggetto
dell'evento.
Gli esempi seguenti mostrano dei casi d'uso, che danno un'idea generale della flessibilità. Gli esempi presumono che gli ascoltatori siano stati aggiunti al distributore di eventi.
Passare semplicemente un soggetto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | use Symfony\Component\EventDispatcher\GenericEvent;
$event = GenericEvent($subject);
$dispatcher->dispatch('pippo', $event);
class PippoListener
{
public function handler(GenericEvent $event)
{
if ($event->getSubject() instanceof Pippo) {
// ...
}
}
}
|
Passare e processare parametri usando l'API ArrayAccess per accedere ai
parametri dell'evento:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | use Symfony\Component\EventDispatcher\GenericEvent;
$event = new GenericEvent(
$subject,
array('type' => 'pippo', 'counter' => 0))
);
$dispatcher->dispatch('pippo', $event);
echo $event['counter'];
class PippoListener
{
public function handler(GenericEvent $event)
{
if (isset($event['type']) && $event['type'] === 'pippo') {
// ... fare qualcosa
}
$event['counter']++;
}
}
|
Filtrare i dati:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | use Symfony\Component\EventDispatcher\GenericEvent;
$event = new GenericEvent($subject, array('data' => 'pippo'));
$dispatcher->dispatch('pippo', $event);
echo $event['data'];
class PippoListener
{
public function filter(GenericEvent $event)
{
strtolower($event['data']);
}
}
|





is a trademark of Fabien Potencier. All rights reserved.