របៀបនៃការប្រើប្រាស់នូវ Console Commands នៅក្នុង Symfony3

Symfony framework ផ្ដល់នូវ commands ជាច្រើនតាមរយៈ bin/console script ។ commands ទាំងអស់នោះត្រូវបានបង្កើតឡើងជាមួយនឹង console component ។ អ្នកក៏អាចប្រើវាក្នុងការបង្កើតនូវ commands ផ្ទាល់ខ្លួនរបស់អ្នកបានផងដែរ។

ក) ការបង្កើត command

Commands ត្រូវបានកំណត់ក្នុង classes មួយដែលត្រូវបានបង្កើតនៅក្នុង Command namespace នៃ bundle របស់អ្នក ហើយឈ្មោះរបស់ពួកគេត្រូវតែបញ្ចប់ដោយ Command suffix​។

ឧទាហរណ៏ខាងក្រោម ជា command ដែលហៅ CreateUser ដែលមានរូបរាងដូចខាងក្រោម៖

ខ) ការ configure នូវ Command

ជាដំបូង អ្នកត្រូវ configure នូវឈ្មោះនៃ command ក្នុង configure() method ហើយបន្ទាប់មកទៀតអ្នកអាច កំណត់នូវ សារជំនួយ (help message) និង input options និង arguments

គ) ការដំណើរការ Command

បន្ទាប់ពី configure command រួចហើយអ្នកអាចដំណើរការវាបាននៅក្នុង terminal៖

អ្នកប្រហែលគិតរួចហើយថា command មួយនេះនឹងមិនធ្វើការអ្វីនោះទេដោយសារតែអ្នកមិនបានសរសេរនូវ តក្ក អ្វីទាល់តែសោះ។ ដូចនេះអ្នកត្រូវបន្ថែមនូវ តក្ក នៅខាងក្នុង execute() method ដែលជាអ្នកចូលទៅកាន់ input stream និង output stream៖

ពេលនេះសូមអ្នកសាកល្បងដំណើរការនូវ command ខាងក្រោម៖

ឃ) Console Input

ប្រើប្រាស់នូវ input options រឺក៏ arguments ដើម្បីបញ្ជូនព័ត៌មានទៅកាន់ command៖

ពេលនេះអ្នកអាច បញ្ចូលនូវ username ទៅកាន់ command បាន៖

ង) ការទទួលយកនូវ Services ពី Service Container

ជាការពិតនៃការបង្កើតនូវ user ថ្មីមួយគឺ command អាចចូលទៅកាន់ services ខ្លះ។ នេះអាចមកពីការដែល command វា extends នូវ ContainerAwareCommand ជំនួស៖

ពេលនេះ អ្នកបានបង្កើតនូវ services និង logic ម្ដងរួចទៅហើយ ដូចនេះ command នឹងដំណើរការនូវ create() method នៃ app.user_manager service ហើយ user នឹងត្រូវបានបង្កើត។

Command Lifecycle

Command មាន៣ lifecycle methods ដែលហៅមកប្រើពេលដែលដំណើរការនូវ command៖

ទី១ initialize() (optional) method នេះគឺដំណើរការមុន interact() និង execute() methods។ គោលបំណងរបស់វាគឺ កំណត់នូវតម្លៃរបស់ អញ្ញត្តិដែលប្រើក្នុង កន្លែងណាមួយនៃ command methods។

ទី២ interact() (optional) method នេះគឺដំណើរការបន្ទាប់ពី initialize() និងមុន execute()។ គោលបំណងវាគឺពិនិត្យមើលថាតើ options/arguments ណាខ្លះដែលមិនមាននិង មិនមានទំនាក់ទំនងទៅនឹង user សម្រាប់តម្លៃទាំងនោះ។ នេះជាកន្លែងចុងក្រោយដែលអ្នកអាចរកមើលនូវ options/arguments ដែលខ្វះខាត។ បន្ទាប់ពីដំណើរការ command មួយនេះគឺ options/arguments ដែលមិនមានគឺនឹងបង្ហាញថា error។

ទី៣ execute() (required) method មួយនេះគឺដំណើរការបន្ទាប់ពី interact() និង initialize() ។ វាផ្ទុកនូវ logic ដែលអ្នកត្រូវការដើម្បីអោយ command មានដំណើរការ។

ឆ) ការសាកល្បង Commands

Symfony ផ្ដល់នូវ tools មួយចំនួនដែលជួយអ្នកក្នុងការសាកល្បង commands របស់អ្នក។ ក្នុងនោះមានមួយដែលពេញនិយមជាងគេគឺ CommandTester class ។ វាប្រើ input និង output classes ដ៏ពិសេសដើម្បីងាយស្រួលសាកល្បងក្រៅពី console ពិត៖

ដើម្បីអាចប្រើ set up service container ដែលពេញលេញសម្រាប់ console test របស់អ្នកបាន អ្នកអាច extend នូវការសាកល្បងរបស់អ្នកពី KernelTestCase