ស្វែងយល់អំពី Controller នៅក្នុង Symfony

នៅពេលណាដែលអ្នកបង្កើតទំព័រ នោះអ្នកត្រូវសរសេរកូដមួយចំនួនដែលផ្ទុកនូវតក្ក (logic) សម្រាប់ទំព័រនោះ។ បែបនេះនៅក្នុង Symfony គេហៅថា Controller ហើយវាគឺជា PHP function ដែលអាចអោយអ្នកយកមកប្រើនៅពេលបញ្ជូននូវការឆ្លើយតបចុងក្រោយ (final response object) ទៅកាន់អ្នកប្រើប្រាស់។

ដើម្បីអោយកាន់តែងាយស្រួល អ្នកអាចធ្វើការ extends ពី base controller class ពីព្រោះវាផ្ដល់ប្រយោជន៏ ២យ៉ាង ដោយទីមួយគឺ វិធីសាស្ត្រផ្លូវកាត់ (shortcut method) ដូចជា render() ហើយនិង redirectToRoute ហើយនិងទីពីរគឺ ចូលទៅកាន់ object (services) តាមរយៈ method get() ។

១ Controller ដែលមានលក្ខណៈសាមញ្ញ៖

ខណៈពេលដែល controller បានហៅដោយ PHP callable (function, method, closure), controller គឺជា method នៅក្នុង controller class ៖

controller1

method numberAction() គឺជា controller ដែលស្ថិតនៅក្នុង controller class LuckyController() ។

បន្ទាត់ទី៣៖ Symfony ទាញយកអត្ថប្រយោជន៍នៃមុខងាររបស់ PHP namespace ទៅកាន់ namespace នៃ controller class ទាំងមូល។

បន្ទាត់ទី៥៖ Symfony ទាញយកអត្ថប្រយោជន៍នៃមុខងាររបស់ PHP namespace ម្ដងទៀត ៈ ពាក្យគន្លឺះ use ធ្វើការបញ្ចូល Response class ដែល controller ត្រូវតែបញ្ចូលត្រលប់មកវិញ។

បន្ទាត់ទី៨៖ class មានបច្ចេកទេសហៅអ្វីគ្រប់យ៉ាង តែគួរបញ្ចប់ដោយពាក្យ Controller  (វាមិនមែនទាមទារជាចាំបាច់ទេ តែគន្លឺះខ្លីមួយចំនួនគឺពឹងផ្អែកលើវា)។

បន្ទាត់ទី១៣៖ action method នៅក្នុង controller class នីមួយៗ គឺតែងតែបន្ថែមនូវពាក្យ Action ។

បន្ទាត់ទី១៧៖ Controller បង្កើតនិងបញ្ជូនត្រលប់នូវ Response object ។

២ ការកណត់ URL ទៅកាន់ Controller៖

ដើម្បីធ្វើការបង្ហាញលទ្ធផលនៃ controller នេះ អ្នកត្រូវធ្វើការកំណត់ URL តាមរយៈ route ។ យើងបានធ្វើវារួចហើយនៅខាងលើជាមួយនឹង @Route(“/lucky/number/{max}”) ។

៣ Base Controller Class ហើយនិង Services ៖

Symfony ភ្ជាប់មកជាមួយនូវ optional base Controller class ។ វានឹងមិនប្រែប្រួល បើទោះបីជា controller របស់អ្នកធ្វើការបែបណាក៏ដោយនៅពេលដែលអ្នកធ្វើការ extends វា ប៉ុន្តែអ្នកនឹងទទួលបាននូវចំនួននៃ helper method និង services container ។ array-like object ដែលផ្ដល់អោយអ្នកនូវការចូលទៅកាន់ object ដែលពេញនិយមនៅក្នុងប្រព័ន្ធ។ object ទាំងអស់នោះហៅដោយ services ហើយ Symfony នាំមកជាមួយនូវ service object ដែលអាច render Twig templates, អាចចូលទៅកាន់សារ និងច្រើនទៀតផងដែរ។

controller2

៤ ការបង្កើត URLs៖

generateUrl() method គឺគ្រាន់តែជា helper method ដែលធ្វើការបង្កើត URL សម្រាប់បោះទៅអោយ route។

controller3

៥ ការ Redirect៖

ប្រសិនបើអ្នកចង់នាំអ្នកប្រើប្រាស់ទៅកាន់ទំព័រផ្សេងទៀត គឺត្រូវប្រើប្រាស់ redirectToRoute() និង redirect() method ។

controller4

៦ ការបង្កើត Template៖

render() method អាចបង្កើត template ព្រមទាំងដាក់នូវអត្ថបទអោយអ្នកបាន។

controller6

៧ ការចូលទៅកាន់ Services ផ្សេងៗ៖

Symfony ភ្ជាប់មកជាកញ្ចប់នៃ object ដ៏ពេញនិយមជាច្រើនដែលហៅថា Services ដែលមានដូចជា បង្កើត template, ផ្ញើរអ៊ីម៉ែល, ការភ្ជាប់ទៅកាន់ Database។ នេះជា Services ដែលអ្នកត្រូវការប្រើជាទូទៅ៖

controller8

ដើម្បីធ្វើការមើល Services ទាំងអស់ដែលមាន សូមប្រើប្រាស់ console command ដូចខាងក្រោម៖

controller9

៨ ការគ្រប់គ្រង Errors និង ទំព័រ 404 ៖

ការឆ្លើយតបនូវ 404 គឺនៅពេលដែលវត្ថុអ្វីមួយមិនត្រូវបានរកឃើញ ដូចនេះបើសិនអ្នកធ្វើការ extends ពី base Controller class សូមមើលឧទាហរណ៏ខាងក្រោម៖

controller10

៩ ការស្នើរសុំ object ជា អាគុយម៉ង់ controller៖

នៅក្នុង Controller គឺមាន Symfony Request object អាចអោយអ្នកកាន់តែងាយស្រួលក្នុងការស្នើរសុំនូវ object បាន។

controller11

១០ ការគ្រប់គ្រង Session៖

Symfony បានផ្ដល់នូវ session object សម្រាប់រក្សានូវព័តមាននៃការស្នើររបស់អ្នកប្រើប្រាស់។

controller12

១១ Flash Messages៖

អ្នកអាចរក្សានូវសារដ៏ពិសេសមួយដោយហៅនូវ “flash” messages នៅលើ session របស់អ្នកប្រើប្រាស់។ ឧទាហរណ៏ សូមអ្នកនឹកទៅកាន់ ទម្រង់នៃការស្នើរសុំមួយ។

controller13

បន្ទាប់ពីស្នើររួច Controller បានកំណត់នូវ flash message នៅក្នុង session បន្ទាប់មក redirect ។ នៅក្នុងឧទាហរណ៏នេះ message key អាចជាអ្វីក៏បាន ហើយអ្នកប្រើវាដើម្បីទទួលនូវសារ។ នៅក្នុង template នៃទំព័របន្ទាប់ នឹងធ្វើការអានសារមួយផ្សេងទៀតពី session :

Twig:

controller14

PHP:

controller15

១២ Request និង Response Object៖

controller16

Request class មាន public properties ជាច្រើននិង methods ដែលបញ្ជូននូវព័ត៏មានដែលអ្នកត្រូវការអំពីការស្នើរ។

Response class គឺទាញយកនូវជុំវិញ HTTP response សារដែលផ្អែកលើអត្ថបទដែលពោរពេញទៅដោយ headers និង content ដែលបានផ្ញើរត្រលប់ទៅកាន់អ្នកប្រើប្រាស់។

controller17

១៣ JSON Helper៖

ដើម្បីបញ្ជូន JSON ពី controller គឺប្រើប្រាស់ json() helper method ក្នុង base Controller។ វាគឺបញ្ចូន JsonResponse() object ពិសេសមួយដែលធ្វើការ encode ទិន្នន័យដោយស្វ័យប្រវត្តិ។

controller18