terima kasih semua
Saya telah mempelajari symfony2 baru-baru ini, dan sekarang saya tidak dapat memahami komponen EventDispatcher, dan dokumentasi rasmi tidak begitu jelas. . Selesaikan
Familiar dengan jQuery? Mekanisme acara sentiasa sama:
(1) Mula-mula tentukan nama acara
Ini seperti onclick js, ia hanyalah satu pengiktirafan Anda boleh menentukan nama acara seperti: vendor.my_event Untuk kemudahan penggunaan, anda boleh menggunakan kelas "enumeration" untuk merekodkan acara ini:
final class Events
{
const MY_EVENT = 'vendor.my_event';
// 其他event……
}
Anda boleh menggunakan Events::MY_EVENT dalam kod dan bukannya menulis rentetan secara langsung Ia tidak perlu membina kelas "penghitungan" ini, tetapi ia disyorkan:
Jika anda membuat kesilapan, ralat akan dilaporkan terus untuk memudahkan penyahpepijatan
Memusatkannya untuk penyelenggaraan yang mudah (kalau tidak anda akan lupa acara apa yang ada)
(2) Tentukan kelas acara (definisi konteks)
Menggunakan jQuery, kami secara amnya tidak mentakrifkan kelas acara sendiri, tetapi sebenarnya kelas acara ini juga wujud (yang lalai digunakan Dalam panggilan balik acara jQuery, parameter pertama yang diterima ialah objek kelas acara, dan objek ini). akan membawa Beberapa perkara kontekstual seperti e.sasaran.
Menggunakan sf's EventDispatcher, anda mentakrifkan kelas acara anda sendiri untuk melakukan semakan jenis dan menyediakan konteks untuk panggilan balik (dalam istilah orang biasa, apakah data yang boleh diperoleh daripada objek acara).
// 这个是sf为你提供的一个基础类
use Symfony\Component\EventDispatcher\Event;
// 你的事件类
class SomeEvent extends Event
{
public function __cosntruct()
{
// 按需定义你的事件类
}
}
(3) Peristiwa pencetus
Anda mempunyai nama acara dan kelas acara, dan sf telah melengkapkan anda dengan penghantar acara Anda boleh menggunakannya terus untuk mencetuskan acara:
Familiar dengan jQuery? Mekanisme acara sentiasa sama:
(1) Mula-mula tentukan nama acara
Ini seperti onclick js, ia hanyalah satu pengiktirafan Anda boleh menentukan nama acara seperti: vendor.my_event Untuk kemudahan penggunaan, anda boleh menggunakan kelas "enumeration" untuk merekodkan acara ini:
Anda boleh menggunakan Events::MY_EVENT dalam kod dan bukannya menulis rentetan secara langsung Ia tidak perlu membina kelas "penghitungan" ini, tetapi ia disyorkan:
(2) Tentukan kelas acara (definisi konteks)
Menggunakan jQuery, kami secara amnya tidak mentakrifkan kelas acara sendiri, tetapi sebenarnya kelas acara ini juga wujud (yang lalai digunakan Dalam panggilan balik acara jQuery, parameter pertama yang diterima ialah objek kelas acara, dan objek ini). akan membawa Beberapa perkara kontekstual seperti e.sasaran.
Menggunakan sf's EventDispatcher, anda mentakrifkan kelas acara anda sendiri untuk melakukan semakan jenis dan menyediakan konteks untuk panggilan balik (dalam istilah orang biasa, apakah data yang boleh diperoleh daripada objek acara).
(3) Peristiwa pencetus
Anda mempunyai nama acara dan kelas acara, dan sf telah melengkapkan anda dengan penghantar acara Anda boleh menggunakannya terus untuk mencetuskan acara:
(4) Takrifkan pendengar (panggilan balik)
(5) Buat panggilan balik mendengar acara yang sepadan
Anda boleh menambah panggilan balik menggunakan kod:
Anda juga boleh menggunakan konfigurasi, iaitu suntikan kebergantungan (DIC):