I componenti principali di symfony sono disaccoppiati, grazie all'oggetto
sfEventDispatcher
. Tale oggetto gestisce le comunicazioni tra i
componenti.
Ogni oggetto può notificare un evento al dispatcher e ogni altro oggetto può connettersi al dispatcher per ascoltare un evento specifico.
Un evento non è altro che un nome composto da uno spazio di nomi e da un
nome, separati da un punto (.
).
Uso
Si può notificare un evento iniziando con il creare un oggetto evento:
$event = new sfEvent($this, 'user.change_culture', array('culture' => $culture));
E notificarlo:
$dispatcher->notify($event);
Il costruttore sfEvent
accetta tre parametri:
- L'"oggetto" di un evento (nella maggior parte dei casi, l'oggetto notificante,
ma può anche essere
null
) - Il nome dell'evento
- Un array di parametri da passare agli ascoltatori
Per ascoltare un evento, basta connettersi al nome dell'evento:
$dispatcher->connect('user.change_culture', array($this, 'listenToChangeCultureEvent'));
Il metodo connect
accetta due parametri:
- Il nome dell'evento
- Un callable PHP da richiamare quando l'evento è notificato
Ecco un esempio di implementazione di un ascoltatore:
public function listenToChangeCultureEvent(sfEvent $event) { // change the message format object with the new culture $this->setCulture($event['culture']); }
L'ascoltatore prende l'evento come primo parametro. L'oggetto evento ha diversi metodi per recuperare informazioni sull'evento:
getSubject()
: Prende l'oggetto del metodo allegato all'eventogetParameters()
: Restituisce i parametri dell'evento
Si può avere accesso all'oggetto evento anche come array, per ottenere i suoi parametri.
Tipi di Evento
Gli eventi possono essere scatenati in tre diversi metodi:
notify()
notifyUntil()
filter()
notify
Il metodo notify()
notifica a tutti gli ascoltatori. Gli ascoltatori non
possono restituire un valore e tutti gli ascoltatori hanno garanzia di
essere eseguiti.
notifyUntil
Il metodo notifyUntil()
notifica a tutti gli ascoltatori, finché uno
non interrompe la catena, restituendo il valore true
.
L'ascoltatore che interrompe la catena può anche richiamare il metodo
setReturnValue()
.
Il notificatore può verificare se un ascoltatore ha processato l'evento,
richiamando il metodo isProcessed()
:
if ($event->isProcessed()) { // ... }
filter
Il metodo filter()
notifica a tutti gli ascoltatori che possono filtrare
il valore dato, passato come secondo parametro dal notificatore e recuperato
dal callable dell'ascoltatore come secondo parametro. A tutti gli
ascoltatori è passato il valore e tutti devono restituire il valore
filtrato. Tutti gli ascoltatori hanno garanzia di essere eseguiti.
Il notificatore può ottenere il valore filtrato richiamando il metodo
getReturnValue()
:
$ret = $event->getReturnValue();
Eventi
application
command
configuration
component
context
controller
form
plugin
request
response
routing
task
template
user
view
view.cache
application
application.log
Metodo di notifica: notify
Notificatori predefiniti: diverse classi
Parametro | Descrizione |
---|---|
priority |
Il livello di priorità (sfLogger::EMERG , sfLogger::ALERT , sfLogger::CRIT , sfLogger::ERR , sfLogger::WARNING , sfLogger::NOTICE , sfLogger::INFO , or sfLogger::DEBUG ) |
L'evento application.log
è il meccanismo usato da symfony per eseguire i log
delle richieste web (si veda il factory logger). L'evento è notificato dalla
maggior parte dei componenti principali di symfony.
application.throw_exception
Metodo di notifica: notifyUntil
Notificatori predefiniti: sfException
L'evento application.throw_exception
è notificato quando un'eccezione viene
lanciata e non raccolta, durante l'esecuzione di una richiesta.
Si può ascoltare questo evento per fare qualcosa di speciale ogni volta che viene lanciata un'eccezione non raccolta (come l'invio di una e-mail o il log di un errore). Si può anche ridefinire il meccanismo predefinito di gestione delle eccezioni di symfony, processando l'evento.
command
command.log
Metodo di notifica: notify
Notificatori predefiniti: sfCommand*
classes
Parametro | Descrizione |
---|---|
priority |
Il livello di priorità (sfLogger::EMERG , sfLogger::ALERT , sfLogger::CRIT , sfLogger::ERR , sfLogger::WARNING , sfLogger::NOTICE , sfLogger::INFO , or sfLogger::DEBUG ) |
L'evento command.log
è il meccanismo usato da symfony per il log della
linea di comando (CLI) di symfony (si veda il factory logger).
command.pre_command
Metodo di notifica: notifyUntil
Notificatori predefiniti: sfTask
Parametro | Descrizione |
---|---|
arguments |
Un array di parametri da passare alla CLI |
options |
Un array di opzioni da passare alla CLI |
L'evento command.pre_command
è notificato subito prima che un task sia
eseguito.
command.post_command
Metodo di notifica: notify
Notificatori predefiniti: sfTask
L'evento command.post_command
è notificato subito dopo che un task sia
eseguito.
command.filter_options
Metodo di notifica: filter
Notificatori predefiniti: sfTask
Parametro | Descrizione |
---|---|
command_manager |
L'istanza sfCommandManager |
L'evento command.filter_options
è notificato prima che le opzioni del
task CLI siano analizzate. L'evento può essere usato per filtrare le
opzioni passate dall'utente.
configuration
configuration.method_not_found
Metodo di notifica: notifyUntil
Notificatori predefiniti: sfProjectConfiguration
Parametro | Descrizion |
---|---|
method |
Il nome del metodo mancante richiamato |
arguments |
I parametri passati al metodo |
L'evento configuration.method_not_found
è notificato quando un metodo non
è definito nella classe sfProjectConfiguration
. Ascoltando questo evento,
si può aggiungere un metodo alla classe senza usare l'ereditarietà.
component
component.method_not_found
Metodo di notifica: notifyUntil
Notificatori predefiniti: sfComponent
Parametro | Descrizione |
---|---|
method |
Il nome del metodo mancante richiamato |
arguments |
I parametri passati al metodo |
L'evento component.method_not_found
è notificato quando un metodo non è
definito nella classe sfComponent
. Ascoltando questo evento,
si può aggiungere un metodo alla classe senza usare l'ereditarietà.
context
context.load_factories
Metodo di notifica: notify
Notificatori predefiniti: sfContext
L'evento context.load_factories
è notificato una volta a richiesta
dall'oggetto sfContext
, subito dopo che tutti i factory sono stati
inizializzati. È il primo evento a essere notificato con tutte le
classi principali inizializzate.
controller
controller.change_action
Metodo di notifica: notify
Notificatori predefiniti: sfController
Parametro | Descrizione |
---|---|
module |
Il nome del modulo da eseguire |
action |
Il nome dell'azione da eseguire |
L'evento controller.change_action
è notificato subito prima che
un'azione sia eseguita.
controller.method_not_found
Metodo di notifica: notifyUntil
Notificatori predefiniti: sfController
Parametro | Descrizione |
---|---|
method |
Il nome del metodo mancante richiamato |
arguments |
I parametri passati al modulo |
L'evento controller.method_not_found
è notificato quando un metodo
non è definito nella classe sfController
. Ascoltando questo evento,
si può aggiungere un metodo alla classe senza usare l'ereditarietà.
controller.page_not_found
Metodo di notifica: notify
Notificatori predefiniti: sfController
Parametro | Descrizione |
---|---|
module |
Il nome del modulo che ha generato l'errore 404 |
action |
Il nome dell'azione che ha generato l'errore 404 |
L'evento controller.page_not_found
è notificato quando si genera
un errore 404 durante la gestione di una richiesta.
Si può ascoltare questo evento per fare qualcosa di speciale quando si verifica un errore 404, come ad esempio inviare una e-mail o scrivere l'errore su un log.
form
form.post_configure
Metodo di notifica: notify
Notificatori predefiniti: sfFormSymfony
L'evento form.post_configure
è notificato dopo dopo che ogni form è configurato.
form.filter_values
Metodo di notifica: filter
Notificatori predefiniti: sfFormSymfony
L'evento form.filter_values
filtra gli array di parametri e file uniti
appena prima di fare il binding.
form.validation_error
Metodo di notifica: notify
Notificatori predefiniti: sfFormSymfony
Parametro | Descrizione |
---|---|
error |
L'istanza di errore |
L'evento form.validation_error
è notificato quando la validazione del form fallisce.
form.method_not_found
Metodo di notifica: notifyUntil
Notificatori predefiniti: sfFormSymfony
Parametro | Descrizione |
---|---|
method |
Il nome del metodo chiamato mancante |
arguments |
Gli argomento passati al metodo |
L'evento form.method_not_found
è notificato quando un metodo non è definito
nella classe sfFormSymfony
. Ascoltando questo evento, un metodo può essere aggiunto
alla classe, senza utilizzare l'ereditarietà.
plugin
plugin.pre_install
Metodo di notifica: notify
Notificatori predefiniti: sfPluginManager
Parametro | Descrizione |
---|---|
channel |
Il canale del plugin |
plugin |
Il nome del plugin |
is_package |
Se il plugin da installare è un pacchetto locale (true ) o un pacchetto web (false ) |
L'evento plugin.pre_install
è notificato subito prima che un plugin
sia installato.
plugin.post_install
Metodo di notifica: notify
Notificatori predefiniti: sfPluginManager
Parametro | Descrizione |
---|---|
channel |
Il canale del plugin |
plugin |
Il nome del plugin |
L'evento plugin.post_install
è notificato subito dopo che un plugin
è stato installato.
plugin.pre_uninstall
Metodo di notifica: notify
Notificatori predefiniti: sfPluginManager
Parametro | Descrizione |
---|---|
channel |
Il canale del plugin |
plugin |
Il nome del plugin |
L'evento plugin.pre_uninstall
è notificato subito prima che un plugin
sia disinstallato.
plugin.post_uninstall
Metodo di notifica: notify
Notificatori predefiniti: sfPluginManager
Parametro | Descrizione |
---|---|
channel |
Il canale del plugin |
plugin |
Il nome del plugin |
L'evento plugin.post_uninstall
è notificato subito dopo che un plugin
sia disinstallato.
request
request.filter_parameters
Metodo di notifica: filter
Notificatori predefiniti: sfWebRequest
Parametro | Descrizione |
---|---|
path_info |
Il percorso della richiesta |
L'evento request.filter_parameters
è notificato quando i parametri
della richiesta sono inizializzati.
request.method_not_found
Metodo di notifica: notifyUntil
Notificatori predefiniti: sfRequest
Parametro | Descrizione |
---|---|
method |
Il nome del metodo richiamato mancante |
arguments |
I parametri passati al metodo |
L'evento request.method_not_found
è notificato quando un metodo non
è definito nella classe sfRequest
. Ascoltando questo evento,
si può aggiungere un metodo alla classe senza usare l'ereditarietà.
response
response.method_not_found
Metodo di notifica: notifyUntil
Notificatori predefiniti: sfResponse
Parametro | Descrizione |
---|---|
method |
Il nome del metodo richiamato mancante |
arguments |
I parametri passati al metodo |
L'evento response.method_not_found
è notificato quando un metodo non
è definito nella classe sfResponse
. Ascoltando questo evento,
si può aggiungere un metodo alla classe senza usare l'ereditarietà.
response.filter_content
Metodo di notifica: filter
Notificatori predefiniti: sfResponse
L'evento response.filter_content
è notificato prima che una risposta
sia inviata. Ascoltando questo evento, si può manipolare il contenuto
della risposta prima che sia inviata.
routing
routing.load_configuration
Metodo di notifica: notify
Notificatori predefiniti: sfRouting
L'evento routing.load_configuration
è notificato quando il factory del
routing carica la sua configurazione.
task
task.cache.clear
Metodo di notifica: notifyUntil
Notificatori predefiniti: sfCacheClearTask
Parametro | Descrizione |
---|---|
app |
Il nome dell'applicazione |
type |
Il tipo di cache (all , config , i18n , routing , module e template ) |
env |
L'ambiente |
L'evento task.cache.clear
è notificato quando l'utente pulisce la cache
dalla CLI con il task cache:clear
.
template
template.filter_parameters
Metodo di notifica: filter
Notificatori predefiniti: sfViewParameterHolder
L'evento template.filter_parameters
è notificato prima che la vista di un
file sia resa. Ascoltando questo evento, si può accedere e manipolare le
variabili passate a un template.
user
user.change_culture
Metodo di notifica: notify
Notificatori predefiniti: sfUser
Parametro | Descrizione |
---|---|
culture |
The user culture |
L'evento user.change_culture
è notificato quando la cultura di un
utente viene cambiata durante una richiesta.
user.method_not_found
Metodo di notifica: notifyUntil
Notificatori predefiniti: sfUser
Parametro | Descrizione |
---|---|
method |
Il nome del metodo richiamato mancante |
arguments |
I parametri passati al metodo |
L'evento user.method_not_found
è notificato quando un metodo non
è definito nella classe sfUser
. Ascoltando questo evento,
si può aggiungere un metodo alla classe senza usare l'ereditarietà.
user.change_authentication
Metodo di notifica: notify
Notificatori predefiniti: sfBasicSecurityUser
Parametro | Descrizione |
---|---|
authenticated |
Se l'utente è autenticato o meno |
L'evento user.change_authentication
è notificato quando lo stato
di autenticazione di un utente cambia.
view
view.configure_format
Metodo di notifica: notify
Notificatori predefiniti: sfView
Parametro | Descrizione |
---|---|
format |
Il formato richiesto |
response |
L'oggetto risposta |
request |
L'oggetto richiesta |
L'evento view.configure_format
è notificato dalla vista quando la
richiesta ha il parametro sf_format
impostato. L'evento è
notificato dopo che symfony ha eseguito cose semplici, come cambiare,
impostare o de-impostare il layout. Questo evento consente agli oggetti
vista e risposta di essere modificati in base al formato richiesto.
view.method_not_found
Metodo di notifica: notifyUntil
Notificatori predefiniti: sfView
Parametro | Descrizione |
---|---|
method |
Il nome del metodo richiamato mancante |
arguments |
I parametri passati al metodo |
L'evento view.method_not_found
è notificato quando un metodo non
è definito nella classe sfView
. Ascoltando questo evento,
si può aggiungere un metodo alla classe senza usare l'ereditarietà.
view.cache
view.cache.filter_content
Metodo di notifica: filter
Notificatori predefiniti: sfViewCacheManager
Parametro | Descrizione |
---|---|
response |
L'oggetto risposta |
uri |
La URI del contenuto in cache |
new |
Se il contenuto in cache è nuovo o meno |
L'evento view.cache.filter_content
è notificato quando un contenuto
viene recuperato dalla cache.
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License license.