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

Route គឺជាប្រព័ន្ធប្រតិបត្តិការសម្រាប់ធ្វើការកំណត់នូវ URL ដែលនៅក្នុងការស្នើរសុំទៅកាន់មុខងាររបស់ controller ដែលបានហៅទៅកាន់ដំណើរការនៃការស្នើរ។ វាទាំងពីរអាចអោយអ្នកកំណត់ URLs បានយ៉ាងជាក់លាក់និងស្អាត។ Route ជា bidirectional mechanism មានន័យថាយើងអាចប្រើប្រាស់វាបានក្នុងការបង្កើត URLs ។

ឧទាហរណ៏នៃ route ៖

ប្រសិនបើអ្នកចង់ធ្វើការផ្គូរផ្គង URL ណាមួយដូចជា /blog/my-post រឺក៏ /blog/all-about-symfony និងផ្ញើរវាទៅកាន់ controller ដែលអាច render blog entry មួយនោះ គឺ route អាចធ្វើបាន ព្រោះ route អាចធ្វើការ map ពីទីតាំងរបស់ URL ទៅកាន់ controller ។

r1

r2

ប្រសិនបើ អ្នកប្រើសប្រាស់ចូលទៅកាន់ /blog នោះ route ទីមួយនិឹងត្រូវបានផ្គូផ្គង ហើយ listAction() និងធ្វើប្រតិបត្តិការ។

ប្រសិនបើអ្នកប្រើសប្រាស់ចូលទៅកាន់ /blog/* នោះ route ទីពីរនឹងត្រូវបានផ្គូផ្គងហើយ showAction() និងធ្វើប្រតិបត្តិការ ព្រោះទីតាំងនៃ route គឺ /blog/{slug}។ អថេរ $slug  គឺបានបោះទៅបាន showAction() ដែលត្រូវនឹងតម្លៃនោះ។

នៅពេលដែលអ្នកមាន {កន្លែងដាក់} នៅក្នុងទីតាំងនៃ route ផ្នែកនោះនឹងក្លាយទៅជាតួអក្សរជំនួសមួយ វាត្រូវគ្នានឹងតម្លៃណាមួយ។ ពេលនេះ controller នឹងមានអាគុយម៉ង់ (argument) មួយដែលហៅថា $placeholder (តួអក្សរជំនួសនិងអាគុយម៉ង់ត្រូវតែផ្គូរផ្គងនឹងគ្នា) ។ route នីមួយៗគឺមានឈ្មោះខាងក្នុងដូចជា blog_list និង blog_show រឺអាចជាអ្វីផ្សេង (ឈ្មោះអាចវែងតែត្រូវតែមានតែមួយគត់) ដែលអ្នកនឹងប្រើវាដើម្បីបង្កើត URL នៅពេលក្រោយ។

១ ការបន្ថែមតួជំនួស

ប្រសិនបើអ្នកមាន blog post ច្រើនដែលផ្ទុកនៅក្នុង  blog_list route គឺត្រូវធ្វើតាមរបៀបនេះ៖

r3

r4

 \d+ គឺជា regular expression ដែលត្រូវនឹងខ្ទង់នៃប្រវែងណាមួយ។

២ ការកំណត់តម្លៃដើមអោយតួជំនួស

r5

r6

ឧទាហរណ៏នៃ route កម្រិតខ្ពស់ (Advance)៖

r7

r8

៣ ការ Loading Routes ៖

ជាទូទៅ Symfony ធ្វើការ loads annotation route ពី AppBundle របស់ Controller/ ហើយ  Symfony loads routes ទាំងអស់នៃ application របស់អ្នកពី ឯកសារកំណត់រចនាសម្ព័ន្ធរបស់ route រឺក៏ (single routing configuration file) : app/config/routing.yml. តែអ្នកក៏អាច load ឯកសារ  route ផ្សេងទៀតតាមដែលអ្នកត្រូវការបានដែរ។

r9

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

អ្នកចាំបាច់ត្រូវកំណត់ឈ្មោះជាក់លាក់ណាមួយអោយ route (ឧទាហរណ៏ blog_show ) និងតួជំនួសផ្សេងទៀត (ឧទាហរណ៏ slug = my-blog-post) ដើម្បីធ្វើការបង្កើត URL.

r10

method generateUrl() បានកំណត់នៅក្នុង base Controller class ។

r11

៥ ការបង្កើត URL ជាមួយនឹង Query String ៖

r12

៦ ការបង្កើត Absolute URLs ៖

router នឹងធ្វើការបង្កើត relative URLs (ឧទាហរណ៏ /blog) ហើយ controller បោះ UrlGeneratorInterface::ABSOLUTE_URL ទៅកាន់អាគុយម៉ង់ទី៣នៃ method generateUrl() ។

r13