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

កន្លងមកនេះ Techfree បានធ្វើការបង្ហាញខ្លួនជាមួយនឹងអត្ថបទជាច្រើនដែលទាក់ទងទៅនឹង Symfony 3 ហើយនៅក្នុងនោះក៏មានការពន្យល់អំពី Component​ មួយចំនួនផងដែរ។ ដោយឡែកនៅក្នុងអត្ថបទនេះវិញ ក៏មានការពន្យល់អំពី Component មួយផងដែរ នោះគឺ PropertyAccess component ។ PropertyAccess component ផ្ដល់នូវ functions ដើម្បី read និង write ពីរឺទៅកាន់ object រឺក៏ array ដែលកំពុងប្រើប្រាស់នូវ string notation ធម្មតា។ 
១) ការតម្លើង
អ្នកអាចតម្លើង PropertyAccess component តាមរយៈវិធី ២យ៉ាង៖
ទី១៖ តម្លើងវាតាមរយៈ Composer (symfony/property-access នៅលើវេបសាយ Packagist)
ទី២៖ ប្រើនូវ official Git repository (https://github.com/symfony/property-access)
បន្ទាប់ពីនោះ គឺទាមទារអោយមាន vendor/autoload.php file ដើម្បីធ្វើការ enable នូវការ load mechanism ដែលបានផ្ដល់ដោយ Composer ដោយស្វ័យប្រវត្តិ។ បើមិនដូច្នោះទេ application របស់អ្នកនឹងមិនអាច ស្វែងរកនូវ classes នៃ Symfony component បាននោះទេ។
២) ការប្រើប្រាស់
Entry point នៃ component នេះគឺ PropertyAccess::createPropertyAccessor factory។ Factory នេះនឹងបង្កើតនូវ instance នៃ PropertyAccessor class ថ្មីមួយជាមួយនឹង default configuration៖

៣) ការ Read ពី Arrays
អ្នកអាច read នូវ array ជាមួយនឹង PropertyAccessor::getValue method ។ វាអាចបញ្ចប់បានដោយប្រើប្រាស់នូវ index notation ដែលត្រូវបានប្រើក្នុង PHP៖

ដូចដែលអ្នកឃើញ គឺ method នឹង return null ប្រសិនបើ index មិនទាន់មាន ។
អ្នកក៏អាចប្រើនូវ arrays ច្រើនវិមាត្របានដែរ៖

៤) ការ Read ពី Objects
getValue() method គឺពិតជា method ដ៏រឹងមាំមែន ហើយអ្នកក៏អាចឃើញនូវ features ទាំងអស់របស់វាដែលកំពុងធ្វើការជាមួយ objects។
៤.១) ការ Access ទៅកាន់ public Properties
ដើម្បី read ពី properties គឺប្រើ “dot” notation៖

៤.២) ការប្រើប្រាស់ Getter
getValue() method ក៏អាច supports នូវការ read ដែលកំពុងប្រើប្រាស់ getters ។ method អាចនឹងបានបង្កើតដោយប្រើប្រាស់នូវ common naming conventions សម្រាប់ getters ។ វា camelizes នូវឈ្មោះ property (first_name មកជា FirstName) និងបន្ថែមពាក្យខាងដើមជាមួយនឹង get ។ ដូចនេះ method ពិតប្រាកដដូរមកជា getFirstName()

៤.៣) ការប្រើប្រាស់ Hassers / Issers
ហើយវាមិនបានបញ្ឈប់នៅទីនេះទេ។ ប្រសិនបើមិនមាន getter ត្រូវបានរកឃើញទេនោះ accessor នឹងក្រលេកទៅរក isser រឺក៏ hasser ។ method នេះគឺបានបង្កើតដោយប្រើប្រាស់ វិធី getters ដូចគ្នា មានន័យថាអ្នកអាចធ្វើវាបានដូចនេះ៖

នេះវានឹងបង្ហាញជា ៖ Hea is an author
៤.៤) Magic __get() Method
getValue() method ក៏អាចប្រើនូវ magic __get() method បានដែរ៖

៤.៥) Magic __call() Method
ជាចុងក្រោយ getValue() អាចប្រើ magic __call() method ប៉ុន្តែអ្នកត្រូវការ enable feature មួយនេះសិនដោយប្រើប្រាស់នូវ PropertyAccessorBuilder

៥) ការ Write ទៅជា Arrays
PropertyAccessor class អាចធ្វើការបានច្រើនជាងការដែលគ្រាន់តែ read នូវ array គឺវាក៏អាច write ទៅជា array បានផងដែរ ។ នេះអាចសម្រេចបានដោយប្រើប្រាស់ PropertyAccessor::setValue method៖

៦) ការ Write ទៅជា Objects
setValue() method គឺមាន features ដូចគ្នាទៅនឹង getValue() method ដែរ។ អ្នកអាចប្រើ setters , magic __set() method រឺក៏ properties ដើម្បីកំណត់ តម្លៃ (values)៖

អ្នកក៏អាចប្រើ __call() ដើម្បីកំណត់តម្លៃ ប៉ុន្តែអ្នកត្រូវការ enable នូវ feature, សូមមើលទៅលើ Enable other Features

៧) ការត្រួតពិនិត្យនូវទីតាំង Property
នៅពេលដែលអ្នកចង់ពិនិត្យមើលថាតើ PropertyAccessor::getValue មានសុវត្ថិភាពដោយការដែលហៅដែលមិនគិតអំពី method មួយនោះ អ្នកអាចប្រើ PropertyAccessor::isReadable ជំនួសវិញ៖

ដូចគ្នានេះដែរគឺអាចធ្វើទៅបានសម្រាប់ PropertyAccessor::setValue ហៅ PropertyAccessor::isWritable method ដើម្បីស្វែងរកថាតើ ទីតាំង property អាចនឹងត្រូវបាន Update ដែររឺទេ៖

៨) ការរួមបញ្ចូល Objects និង Arrays
អ្នកអាចបញ្ចូល objects និង arrays ជាមួយគ្នាបាន៖

៩) ការ Enable នូវ Features ដទៃទៀត
PropertyAccessor អាចនឹងត្រូវបាន configure ដើម្បី enable extra features ។ ដើម្បីធ្វើដូចនេះអ្នកគួរតែប្រើ PropertyAccessorBuilder

រឺក៏អ្នកអាច pass parameters ដោយផ្ទាល់ ទៅកាន់ constructor (នេះមិនមែនជាវិធីដែលគួរតែធ្វើនោះទេ)៖