ស្វែងយល់អំពី Events និង Event Listeners ក្នុង Symfony3

កំឡុងពេលដែលដំណើរការនូវ Symfony application, ព្រឹត្តិការណ៏ជាច្រើនបានកើតឡើង។ Application របស់អ្នកអាចដឹងអំពីព្រឹត្តិការណ៏ទាំងអស់នោះបាននិងធ្វើការទទួលខុសត្រូវលើពួកគេដោយដំណើរការនូវកូដផ្សេងទៀត។

ព្រឹត្តិការណ៏ខាងក្នុងបានផ្ដល់ដោយ Symfony  ដោយខ្លួនវាផ្ទាល់គឺកំណត់នៅក្នុង KernelEvents class ។ ភាគី bundles និង libraries ក៏បានកើនឡើងនូវ ព្រឹត្តិការណ៏ ហើយ application របស់អ្នកផ្ទាល់អាចនឹងកើនឡើងនូវ custom events ជាលំដាប់ផងដែរ។

ឧទាហរណ៏ទាំងអស់បានបង្ហាញនៅក្នុងអត្ថបទដែលប្រើប្រាស់ព្រឹត្តិការណ៏ដូចគ្នានឹង KernelEvents::EXCEPTION សម្រាប់គោលបំនងដែលមានភាពស្ថិតស្ថេរ។ នៅក្នុង application របស់អ្នកផ្ទាល់ អ្នកអាចប្រើ event ផ្សេងទៀតនិង even ដែលបញ្ចូលគ្នាដែលស្ថិតក្នុងនាមជា subscriber ដូចគ្នា។

១ ការបង្កើត Event Listener

ខាងក្រោមនេះជាវិធីនៃការបង្កើតនិងចុះឈ្មោះនូវ event ទៅក្នុង event listener ៖

ev1

ev2

ពេលនេះ class នេះបានបង្កើតរួចរាល់ហើយ អ្នកគ្រាន់តែចុះឈ្មោះវាទៅជា service និង notify Symfony ដែលវាគឺជា “listener”  នៅលើ kernel.exception event ដោយប្រើប្រាស់ “tag” ។

ev3

២ ការបង្កើត Event Subscriber

វិធីសាស្ត្រផ្សេងទៀតក្នុងការ listen នូវ event គឺតាមរយៈ event subscriber គឺ class ណាមួយដែលកំណត់នូវ method មួយរឺច្រើនដែល listen ទៅកាន់ events មួយរឺច្រើន។ ភាពខុសគ្នាជាសំខាន់នៃ event listeners គឺ subscriber មួយនោះគឺតែងតែដឹងថាតើ events ណាមួយដែលនឹងធ្វើការ listening ។

នៅក្នុង subscriber គឺ methods ផ្សេងៗគ្នាអាច listen ទៅកាន់ event តែមួយបាន។ នៅគ្រានេះ methods ណាមួយដែលធ្វើដំណើរការ គឺកំណត់ដោយ priority parameter នៃ method នីមួយៗ ។ ឧទាហរណ៏ខាងក្រោមនេះបង្ហាញអំពី event subscriber ដែលកំណត់ methods មួយចំនួនដែល listen ទៅកាន់ kernel.exception event ដូចគ្នា។

ev4

ev5

 

ពេលនេះអ្នកគ្រាន់តែចុះឈ្មោះ class ទៅជា service និងបន្ថែម kernel.event_subscriber tag ដើម្បីប្រាប់ទៅកាន់ Symfony ដែលនេះគឺជា event subscriber៖

ev6

៣ ការស្នើរ Events និងឆែកមើលប្រភេទ

Single page អាចធ្វើការស្នើរបានច្រើនលើក ហើយសម្រាប់ core Symfony events អ្នកប្រហែលជាត្រូវការឆែកមើលថាតើ ប្រសិនបើ event គឺសម្រាប់ “master” request រឺក៏ “sub request”៖

ev7

រឿងមួយចំនួនដូចជាការឆែកមើលព័ត៌មាននៅលើ real  request ប្រហែលជាមិនត្រូវការធ្វើអោយរួចរាល់នៅលើ sub-request listeners ទេ។

Listeners រឺក៏ Subscribers

Listeners និង Subscriber អាចនឹងប្រើក្នុង application ដែលមិនច្បាស់លាស់តែមួយបាន។ ការសម្រេចចិត្តប្រើនូវអ្វីផ្សេងក្រៅពីវាគឺអាចមានបញ្ហាផ្ទាល់ខ្លួនខ្លះ។ តែទោះជាយ៉ាងណាវាក៏មានគុណសម្បត្តិខ្លះផងដែរ៖

ទី១៖ Subscribers គឺងាយស្រួលប្រើបានម្ដងទៀត ព្រោះចំណេះដឹងនៃ events គឺរក្សាទុកក្នុង class ច្រើនជាងនៅក្នុង service definition ។ នេះគឺជាមូលហេតុដែល Symfony ប្រើប្រាស់ subscribers នៅខាងក្នុង។

ទី២៖ Listeners គឺមានភាពបត់បែន ព្រោះ bundles អាចបើករឺបិទបានដោយផ្អែកទៅលើ configuration value ខ្លះផងដែរ។

៥ ការ Debug Event Listeners

អ្នកអាចស្វែងរកនូវ listeners ដែលចុះឈ្មោះក្នុង event dispatcher ប្រើប្រាស់នូវ console ។ ដើម្បីបង្ហាញនូវ events ទាំងអស់នោះ និង listeners របស់វាគឺប្រើប្រាស់នូវ command ដូចខាងក្រោម.៖

ev8

អ្នកអាចទទួលបាននូវ listeners ដែលចុះឈ្មោះរួចរាល់សម្រាប់ event ដែលជាក់លាក់ ដោយបញ្ជាក់ឈ្មោះរបស់វា៖

ev9