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

Validation ជាកិច្ចការមួយដែលតែងតែមាននៅក្នុង web applications ។ ទិន្នន័យដែលបានបញ្ចូលរួចនៅក្នុង form ត្រូវតែធ្វើការ validated រឺផ្ទៀងផ្ទាត់។ ទិន្នន័យចាំបាច់ត្រូវធ្វើការ validate មុននឹងវាត្រូវបានបញ្ចូលទៅក្នុង database រឺក៏ឆ្លងកាត់ទៅ web service ។

Symfony ភ្ជាប់មកជាមួយនឹង Validator component ដែលធ្វើអោយការងារនេះកាន់តែងាយស្រួលនិងតម្លាភាព។ component នេះគឺផ្អែកទៅលើ JSR303 Bean Validation specification ។

១ មូលដ្ឋានគ្រឹះនៃ Validation

វិធីដែលល្អបំផុតដើម្បីយល់នូវ validation នោះគឺនៅក្នុង action ។ ឧបមាថាអ្នកបានបង្កើត plain-old PHP object ដែលអ្នកចង់ប្រើនៅកន្លែងផ្សេងទៀតក្នុង application របស់អ្នក សូមមើលឧទាហរណ៏ខាងក្រោម៖

v1

មកដល់ត្រឹមនេះគឺវាគ្រាន់តែជា ordinary class ដែលផ្ដល់ជូននូវគោលបំណងខ្លះនៅក្នុង application របស់អ្នក។ គោលដៅនៃ validation គឺប្រាប់អ្នកថា ប្រសិនបើទិន្នន័យនៃ object គឺមានរួចហើយ។ សម្រាប់ការងារមួយនេះ អ្នកនឹង configure នូវ list នៃ rules (ហៅថា constraints) ដែល object ត្រូវតែស្របតាមលំដាប់លំដោយ។ ក្បួនច្បាប់ទាំងនេះគឺបញ្ជាក់តាមរយៈលេខនៃទម្រង់ខុសៗគ្នា (YAML, XML, annotations រឺក៏ PHP)។

ខាងក្រោមជាឧទាហរណ៏ដើម្បីអោយច្បាស់ថា $name property គឺមិនទទេរ សូមធ្វើដូចខាងក្រោម៖

v2

២ ការប្រើប្រាស់ Validator Service

ដើម្បី validate Author object ត្រូវប្រើ validate() method នៅលើ validator service (class Validator)។ ការងារនៃ validator គឺងាយស្រួលណាស់ គឺធ្វើការ read the constraints នៃ class និង verify មើលប្រសិនបើទិន្នន័យនៅលើ object សាកសមទៅនឹង constraints ទាំងនោះ។ ប្រសិនបើ validation បរាជ័យ នោះ non-empty list នៃការ error (class ConstraintViolationList) នឹងបញ្ជូនត្រលប់មកវិញ។ ដូចនេះយើងត្រូវធ្វើវានៅក្នុង Controller៖

v3

ប្រសិនបើ $name property ទទេរ នោះអ្នកត្រូវមើល សារ error មួយនេះ៖

v4

ប្រសិនបើអ្នកបញ្ចូលតម្លៃទៅក្នុង name property នោះអ្នកនឹងបានឃើញសារដែលជោគជ័យ។

អ្នកក៏អាចដាក់បណ្ដុំនៃ error ចូលទៅក្នុង template បានផងដែរ៖

v5

នៅក្នុង template អ្នកអាចបញ្ចេញនូវ list នៃ error តាមដែលអ្នកត្រូវការបាន៖

v6

Configuration ៖

Symfony validator បានបើកស្រាប់ប៉ុន្តែអ្នកត្រូវតែធ្វើការបើក annotations ប្រសិនបើអ្នកកំពុងប្រើនូវ annotation method ដើម្បីបញ្ជាក់អោយ constraints របស់អ្នក៖

v7

Constraints៖

Validator គឺត្រូវបានបង្កើតឡើងដើម្បី validate objects ប្រឆាំងទៅនឹង constraints ។ នៅក្នុងការ validate នូវ object គឺគ្រាន់តែផ្គូផ្គង constraints មួយរឺច្រើនទៅនឹង class របស់វាហើយក៏បោះវាទៅ validator service ជាការស្រេច។

បើនៅក្រោយនៃ constraint គឺ PHP object ធម្មតាដែលធ្វើការអះអាងការពារ statement។ ការពិត constraint អាចជា “Cake មួយដែលមិនត្រូវបានគេដុត“ ចំណែកនៅក្នុង Symfony, constraints គឺស្រដៀងទៅនឹង ពួកវាបានអះអាងថាលក្ខខណ្ឌ័គឺ ពិត។ ការអោយតម្លៃ គឺ constraint នឹងប្រាប់អ្នកប្រសិនបើតម្លៃនោះ ប្រកាន់ខ្ជាប់ទៅនឹងច្បាប់នៃ constraint។

Constraint Configuration៖

Constraints ខ្លះដូចទៅនឹង NotBlank គឺមានលក្ខណៈសាមញ្ញ ដូចទៅនឹង Choice constraint ដែលមាន configuration options available មួយចំនួន។ ឧបមានថា Author class នោះមាន property ផ្សេងទៀតបានហៅ gender ដែលអាចកំណត់ទៅ male , female រឺក៏ផ្សេងទៀត។

v8

Constraint Targets៖

Constraints អាចនឹងដាក់ស្នើរទៅ class property, public getter method getFullName() រឺក៏ entire class។ Property constraints គឺងាយស្រួលប្រើបំផុត។ Getter constraints អាចអោយអ្នកបញ្ញ្ជាក់នូវ validation rules ដ័ស្មុគស្មាញជាច្រើនទៀត។ ចុងក្រោយ class constraints គឺបម្រុងទុកសម្រាប់ scenarios ដែលជាកន្លែងដែលអ្នកអាច validate class បានទាំងមូល។

Properties៖

ការ validate នូវ class properties គឺជាវិធីសាស្ត្រដែលសាមញ្ញបំផុត។ នៅក្នុង Symfony អាចអោយអ្នកធ្វើការ validate នូវ private, protected រឺក៏ public properties។ list បន្ទាប់នឹងបង្ហាញអ្នកអំពីរបៀប configure $firstName property នៃ Author class ដែលយ៉ាងហោចណាស់មាន ៣ តួអក្សរ៖

v9

Getters៖

Constraints អាចស្នើរអោយមានការបញ្ចូនត្រលប់មកនូវតម្លៃ method បានផងដែរ។ នៅក្នុង Symfony អាចអោយអ្នកបន្ថែមនូវ constraint ទៅ public method ដទៃទៀតបានដែលមានឈ្មោះចាប់ផ្ដើមជាមួយនឹង get, is, has ។  អត្ថប្រយោជន៏នៃ វិធីសាស្ត្រនេះគឺវាអាចអោយអ្នក validate object របស់អ្នកជាលក្ខណៈ dynamic។  ឧទាហរណ៏ថា អ្នកចង់ដឹងថា លេខសម្ងាត់ដែលអ្នកបានបញ្ចូលនោះតើវាត្រូវនឹង first name នៃអ្នកប្រើរឺក៏អត់? អ្នកអាចធ្វើបានដោយបង្កើតនូវ isPasswordLegal() method បន្ទាប់មកទៀតត្រូវបញ្ជាក់ថា method នោះនឹងបញ្ជូននូវ true ត្រលប់មកវិញ។

v10

ពេលនេះអ្នកត្រូវចាប់ផ្ដើមបង្កើត isPasswordLegal() method ហើយបញ្ចូល នូវតក្ក រឺ logic តាមដែលអ្នកត្រូវការបាន៖

v11

Classes ៖

Constraints ខ្លះបានស្នើរទៅកាន់ entire class ដែលនឹង validate។ ឧទាហរណ៏ Callback constraint គឺជា generic constraint ដែលបានស្នើរទៅ class ដោយខ្លួនវាផ្ទាល់។ ពេលដែល class បាន validated នោះ method នឹងបញ្ជាក់ដោយ constraint នោះថា ដំណើរការគឺធម្មតា។

សរុបមក Symfony validator គឺជា tool ដ៏ពេញនិយមមួយប្រភេទដែលអាចនឹងមានអានុភាពក្នុងការធានានូវទិន្នន័យនៃ object ផ្សេងៗ ដែលមានរួចហើយ។ ឥទ្ធិពលដែលនៅពីក្រោយនៃ validation lies ក្នុង constraints  ណាមួយដែលជាច្បាប់ដេលអ្នកបានស្នើរទៅកាន់ properties រឺ getter method នៃ object របស់អ្នក។ ហើយខណៈពេលដែលអ្នកកំពុងតែប្រើ validation framework ដោយប្រយោលពេលដែលប្រើប្រាស់ forms ត្រូវចាំថាវាអាចនឹងប្រើគ្រប់ទីកន្លែងដើម្បី validate object ផ្សេងទៀត៕