Eventi
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
applicationcommandconfigurationcomponentcontextcontrollerformpluginrequestresponseroutingtasktemplateuserviewview.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.
インデックス
Document Index
関連ページリスト
Related Pages
Introduzione
Il Formato YAML
I principi dei file di configurazione
Il file di configurazione settings.yml
Il file di configurazione factories.yml
Il file di configurazione generator.yml
Il file di configurazione databases.yml
Il file di configurazione security.yml
Il file di configurazione cache.yml
Il file di configurazione routing.yml
Il file di configurazione app.yml
Il File di Configurazione filters.yml
Il file di configurazione view.yml
Altri file di configurazione
Eventi
Task
Appendice A - Licenza
日本語ドキュメント
Japanese Documents
2011/01/18 Chapter 17 - Extending Symfony
2011/01/18 The generator.yml Configuration File
2011/01/18 Les tâches
2011/01/18 Emails
2010/11/26 blogチュートリアル(8) ビューの作成
リリース情報
Release Information
- 2.0 : 2.0.10(2011/02/06)
Symfony2日本語ドキュメント - 1.4 : 1.4.16(2011/12/13)
Changelog
