ការប្រើប្រាស់ DoctrineBundle នៅក្នុង Symfony

Doctrine project ជាកន្លែងដែលប្រមូលផ្ដុំនូវសំណុំនៃ PHP libraries ដែលសំដៅទៅលើការផ្ដល់នូវ persistence services និង functionality ដែលពាក់ព័ន្ធ។ គុណតម្លៃរបស់វាគឺមានដូចជា Object Relational Mapper ហើយនិង Database Abstraction Layer ។ Object relation mapper (ORM) សម្រាប់ PHP ដែលស្ថិតនៅលំដាប់កំពូលនៃ database abstraction layer (DBAL)។ មួយក្នុងចំណោម key features របស់វាគឺ optional (ជម្រើស) ក្នុងការសរសេរ database queries ក្នុង proprietary object oriented SQL dialect ដែលហៅថា Doctrine Query Language (DQL) ដែលដាក់នាមដោយ Hibernates HQL ។

DBAL ជា database abstraction layer ដ៏ពេញនិយមជាមួយនឹង feature នៃ database schema introspection និង schema management ព្រមទាំង PDO abstraction ជាច្រើនផងដែរ។

ការរួមបញ្ចូលនូវ Doctrine’s ORM និង DBAL projects ទៅក្នុង Symfony applications គឺវាមានផ្ដល់នូវ configuration options និង console commands និង even a web debug toolbar collector ផងដែរ។

១ ការតម្លើង៖

ជំហានទី១៖ ដោនឡូដ Bundle

សូមបើកនូវ command console ហើយវាយ enter នូវ project directory របស់អ្នកនិងដំណើរការនូវ command ដូចខាងក្រោមដើម្បីដោនឡូដនូវជំនាន់ចុងក្រោយបង្អស់នៃ bundle៖

doctrine1

ដើម្បីដំណើរការ command នេះបានគឺទាមទារអោយមានការតម្លើង Composer ជាមុនសិន។

ជំហានទី២៖ បើក Bundle

ដើម្បីបើកនូវ Bundle អ្នកត្រូវបន្ថែមកូដដូចរូបភាពខាងក្រោមនៅក្នុង app/AppKernel.php file នៃ project របស់អ្នក៖

doctrine2

Entity Listeners៖

Entity Listeners ដែលជា services ត្រូវតែធ្វើការចុះឈ្មោះជាមួយនឹង entity listener resolver។ អ្នកអាច tag នូវ entity listeners របស់អ្នកហើយពួកវានឹងបន្ថែមដោយស្វ័យប្រវត្តិទៅកាន់ resolver។ ប្រើប្រាស់ entity_manager attribute ដើម្បីអោយច្បាស់ថា entity manager ណាមួយដែលវាត្រូវចុះឈ្មោះជាមួយ។ សូមមើលឧទាហរណ៏៖

doctrine3

ប្រសិនបើអ្នកប្រើនូវ doctrine/orm ជំនាន់ទាបជាង 2.5 នោះអ្នកអាចចុះឈ្មោះនូវ entity listener ក្នុង entity របស់អ្នកបានយ៉ាងស្រួល៖

doctrine4

៣ ឯកសារយោងនៃការ Configuration៖

សូមមើលលម្អិតអំពីឯកសារយោងនៃការ Configuration តាមរយៈ url មួយនេះ៖

https://symfony.com/doc/current/bundles/DoctrineBundle/configuration.html

ក លម្អិតអំពី Configuration៖

ឧទាហរណ៏ខាងក្រោមនេះបង្ហាញអំពីការ configuration default ទាំងអស់៖

doctrine5

នៅមាន configuration options ជាច្រើនផ្សេងទៀតដែលអ្នកអាចប្រើក្នុងការ overwrite classes បានប៉ុន្តែ ទាំងអស់នោះគឺប្រើបានសម្រាប់តែករណីណាដែលមានលក្ខណៈពិបាក (Advanced)។

.១ Caching Drivers

សម្រាប់ caching drivers អ្នកអាចបញ្ជាក់នូវតម្លៃដូចជា array, apc, apcu, memcache, memcached រឺក៏ xcache បាន។ ឧទាហរណ៏ខាងក្រោមបង្ហាញលម្អិតអំពី caching configuration៖

doctrine6

.២ Mapping Configuration

និយមន័យដ៏ជាក់លាក់នៃ mapped entities ទាំងអស់នោះគឺគ្រាន់តែជា configuration ដ៏សំខាន់សម្រាប់ ORM និង configuration options ជាច្រើនទៀតដែលអ្នកអាចគ្រប់គ្រង។ configuration options ខាងក្រោមមានរួចហើយក្នុង mapping៖

type ៖ មួយក្នុងចំណោម annotation, xml, yml, php រឺក៏ staticphp ។ វាបញ្ជាក់អោយប្រភេទនៃ metadata type ដែល mapping របស់អ្នកកំពុងប្រើ។

dir៖ទីតាំងដែលនឹងត្រូវ mapping រឺក៏ entity files (ផ្អែកលើ driver) ប្រសិនបើទីតាំងនេះមានជាប់ទាក់ទង គឺវាត្រូវបានសន្មតថាជា bundle root ។ ប្រសិនបើអ្នកចង់ប្រើ option នេះដើម្បីបញ្ជាក់ absolute paths អ្នកគួរតែបន្ថែមនូវ kernel parameters នៅខាងមុខទីតាំងដែលមានរួចក្នុង DIC (ឧទាហរណ៏៖ %kernel.root_dir%)។

prefix៖ ជា namespace prefix ដែល entities ទាំងអស់នៃ mapping share នេះ។ prefix មួយនេះមិនដែលមានបញ្ហាជាមួយនឹង prefixes នៃការកំណត់ mapping ដទៃទៀតនោះទេ បើមិនដូចនេះទេ entities មួយចំនួនរបស់អ្នកនឹងមិនត្រូវបានរកឃើញដោយ Doctrines ឡើយ។

alias៖ Doctrine ផ្ដល់នូវវិធីមួយដែលអាចប្រែក្លាយ entity namespaces ទៅជាធម្មតា (ឈ្មោះក្រៅ និងខ្លី) ដែលនឹងត្រូវប្រើក្នុង DQL queries រឺក៏សម្រាប់ Repository access ។

is_bundle៖ option មួយនេះជាតម្លៃនៃ drived ពី dir និងជាសំណុំដែលកំណត់ទៅជា true ប្រសិនបើ dir មានជាប់ទាក់ទងនឹង file_exists()  ដែលពិនិត្យមើលថានឹងត្រលប់មកជា false។

.៣ Filters Configuration

អ្នកអាចកំណត់ doctrine filters ក្នុង configuration file របស់អ្នកបានដោយស្រួល៖

doctrine7

myFilter៖ Filter identifier (ត្រូវតែមាន)។

class៖ Filter target class (ត្រូវតែមាន)

enable៖ បើក និងបិទ filter ដោយ default (optional – Default disable)

parameters៖ កំណត់ default parameters (មានក៏បាន អត់ក៏បាន)

myParameter: myValue ៖ ចងតម្លៃ myValue ទៅកាន់ parameter myParameter (មានក៏បាន អត់ក៏បាន)

Doctrine DBAL Configuration

ក្រៅពី default Doctrine options នៅមាន Symfony-related ផ្សេងទៀតដែលអ្នកអាចធ្វើការ configure បាន។ ប្លុកខាងក្រោមបង្ហាញអំពី configuration keys ទាំងអស់ដែលអាចធ្វើបាន៖

doctrine8

ប្រសិនបើអ្នកចង់ configure នូវ connections ច្រើនក្នុង YAML សូមធ្វើការបញ្ចូលវាទៅខាងក្រោម key connections និងដាក់ឈ្មោះអោយពួកវាជាលក្ខណៈ unique (មានតែមួយ)៖

doctrine9

Database_connection service តែងតែសំដៅទៅលើ default connection ដែលជាការកំណត់ រឺក៏ configured ដំបូងគេតាមរយៈ default_connection parameter ។ connection នីមួយៗគឺអាចចូលបានតាមរយៈ doctrine.dbal.[name]_connection service ដែល [name] ជាឈ្មោះនៃ connection ។