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

តើ Yaml Component គឺជាអ្វី? នៅក្នុង Symfony Yaml component ញែក YAML strings ដើម្បីបម្លែងវាទៅជា PHP arrays និងជាអ្នក loads និង dumps YAML files។ មិនតែប៉ុណ្ណោះវាក៏មានលទ្ធភាពក្នុងការបម្លែង PHP arrays ទៅជា YAML strings បានផងដែរ។ YAML, YAML គឺមិនមែនជា Markup languages នោះទេ វាជា human friendly data serialization strandard សម្រាប់ programming languages ទាំងអស់។ YAML គឺជាទម្រង់ (format) ដ៏ល្អមួយសម្រាប់ configuration files របស់អ្នក។ YAML files គឺធ្វើការបង្ហាញជា XML files និងជា read ជា INI files។

Symfony Yaml Component implements នូវ selected subset នៃ features ដែលបានកំណត់ក្នុង YAML 1.2 version specification

១) ការតម្លើង

ចំពោះការតម្លើង វាមិនខុសគ្នាប៉ុន្មានទេពីអត្ថបទមុនៗនោះទេ គឺមាន២របៀបខុសគ្នា៖

ទី១៖ តម្លើង Yaml Component តាមរយៈ Composer (symfony/yaml នៅលើ Packagist)

ទី២៖ ប្រើនូវ Official Git repository (https://github.com/symfony/yaml)

បន្ទាប់មកទៀត គឺទាមទារអោយមាន vendor/autoload.php file ដើម្បី enable នូវ autoloading mechanism ដែលបានផ្ដល់ដោយ Composer។ បើមិនដូច្នេះទេ application របស់អ្នក​នឹងមិនអាចមានលទ្ធភាពក្នុងការស្វែងរកនូវ classes នៃ Symfony component នោះទេ។

២) ហេតុអ្វីបានជាត្រូវប្រើ YAML Component?

.ក) លឿន

ផ្នែកមួយនៃគោលបំណងរបស់ Symfony Yaml គឺដើម្បីស្វែងរកនូវតុល្យភាពរវាង ល្បឿននិង features។ វា supports តែ features ណាដែលចាំបាច់ដើម្បី handle នូវ configuration files។ Notable lacking features គឺជា document directives, multi-line quoted message, compact block collections ហើយនិងជា multi-document files។

.ខ) Real Parser

វាបំពាក់នូវ real parser ដែលមានលទ្ធភាពក្នុងការញែកនូវ subset ធំៗនៃ  YAML specification សម្រាប់តម្រូវការ configuration ទាំងអស់របស់អ្នក។ វាអាចមានន័យថា parser គឺជា pretty robust, ងាយស្រួលយល់ និងសាមញ្ញក្នុងការ extend។

.គ) សម្អាតនូវ Error Message

នៅពេលណាដែលអ្នកមានបញ្ហា Syntax ជាមួយនឹង YAML files របស់អ្នកនោះ library នឹងបង្ហាញនូវសារជំនួយមួយ (helpful message) ជាមួយនឹង ឈ្មោះ file (filename) និង បន្ទាត់លេខរៀងទីប៉ុន្មានដែលមានបញ្ហាកើតឡើង។ វាងាយស្រួលក្នុងការ debug យ៉ាងច្រើន។

.ឃ) Dump Support

YAML ក៏មានលទ្ធភាពក្នុងការ dump PHP arrays ទៅជា YAML object support បានដែរ ហើយនិង inline level configuration សម្រាប់លទ្ធផលដ៏ល្អស្អាតមួយ (pretty outputs)។

.ង) Types Support

វា supports បានច្រើននៃ YAML built-in types ដូចជា date, integers, octals, Booleans និងជាច្រើនទៀត។

.ច) Full Merge Key Support

Support បានយ៉ាងពេញលេញសម្រាប់ references, aliases និង full merge key។ មិនធ្វើឡើងវិញដោយខ្លួនឯងដោយធ្វើការ reference ទៅលើ common configuration bits។

៣) ការប្រើប្រាស់ Symfony YAML Component

Symfony Yaml component គឺពិតជាសាមញ្ញណាស់និង មាននូវ classes សំខាន់ៗចំនួន២ ដូចជា parser YAML strings (Parser) និង dumps PHP arrays ទៅជា YAML string (Dumper)។

នៅលើនៃ classes ទាំងពីរនេះគឺ Yaml class ដែលដើរតួជា thin wrapper ដែលសម្រួលក្នុងការប្រើជាធម្មតា។

.ក) ការ Read YAML Files

parse() method ញែកនូវ YAML string និងបម្លែងវាអោយទៅជា PHP array។

ប្រសិនបើមាន error កើតឡើងកំឡុងពេលញែកនោះ parser បោះនូវ ParseException exception indicating the error type និងបន្ទាត់ក្នុង original YAML string កន្លែងដែល error បានកើតឡើង៖

.ខ) ការសរសេរ YAML Files

dump() method dumps PHP array ផ្សេងៗទៅជា YAML representation របស់វា៖

ប្រសិនបើ error កើតមានឡើងកំឡុងពេល dump នោះ parser នឹងបោះនូវ DumpException exception។

  • Array Expansion និង Inlining

YAML format supports នូវ ២ប្រភេទនៃ representation សម្រាប់ arrays, expanded មួយ និង inline មួយ។ ជា default, dumper ប្រើប្រាស់នូវ expanded representation៖

Argument ទី២នៃ dump() method ធ្វើការ customizes នូវ level ណាដែលបានប្ដូរលទ្ធផលពី expanded representation ទៅជា inline មួយ៖

  • Indentation

ជា default គឺ YAML component នឹងប្រើនូវ ៤ spaces សម្រាប់ indentation។ បែបនេះគឺអាចនឹងធ្វើការកែប្រែដោយប្រើប្រាស់នូវ argument ទី៣ដូចខាងក្រោម៖

  • Numeric Literals

អ្វីដែលថ្មីក្នុង version 3.2 គឺ support នូវការញែក Integers ដែលបានចាត់ថ្នាក់ដោយ underscores និងបានធ្វើការណែនាំនៅក្នុង Symfony 3.2។

Long numeric literals, being ineger, float រឺក៏ hexadecimal គឺត្រូវបានគេស្គាល់ថាសម្រាប់ poor readability របស់ពួកគេក្នុងកូដនិង configuration files។ នេះជាមូលហេតុដែល YAML files អនុញ្ញាតអោយធ្វើការបន្ថែមនូវ underscores ដើម្បីពង្រឹងនូវ readability របស់ពួកគេ៖

កំឡុងពេលនៃការញែកនៃ YAML contents គឺសញ្ញា _ ទាំងអស់នឹងត្រូវយកចេញ (removed) ពី numeric literal contents ដូចនេះគឺមិនមានការកំណត់ក្នុងតួលេខនៃ underscores ទេ អ្នកអាច រួមបញ្ចូល (include) រឺក៏ ធ្វើតាមរយៈការ group contents។

៤) ការប្រើប្រាស់ Flags (Advanced Usage: Flags)

3.1 Flag បានពន្យល់ណែនាំនៅក្នុង Symfony 3.1 និងបាន replaced នូវ Boolean arguments ដំបូងបង្អស់។

.ក) ការ Parse និង Dump Object

អ្នកអាច dump objects បានដោយប្រើប្រាស់នូវ DUMP_OBJECT flag៖

ហើយការញែកពួកគេគឺប្រើប្រាស់នូវ PARSE_OBJECT flag៖

YAML component ប្រើនូវ serialize() method របស់ PHP ដើម្បីធ្វើការ generate នូវ string representation នៃ object។

.ខ) Handling Invalid Types

ជា default គឺ parser នឹងធ្វើការ encode invalid types ជា null។ អ្នកអាចធ្វើអោយ parser ដោយបោះ exceptions ដោយប្រើប្រាស់នូវ PARSE_EXCEPTION_ON_INVALID_TYPE flag៖

ដូចគ្នានេះដែរអ្នកអាចប្រើ DUMP_EXCEPTION_ON_INVALID_TYPE ពេលដែលធ្វើការ dump៖

.គ) Date Handling

ជា default គឺ YAML parser នឹងបម្លែងនូវ unquoted string ដែលមើលទៅដូចនឹង date រឺក៏ date-time ទៅជា Unix timestamp។ សម្រាប់ឧទាហរណ៏គឺ 2016-09-15 រឺក៏ 2016-09-14 27T02:59:34:43.1Z (ISO-8601)៖

អ្នកអាចធ្វើអោយវាបម្លែងទៅជា DateTime instance ដោយប្រើប្រាស់នូវ PARSE_DATETIME flag៖

.ឃ) ការ Dump Multi-line Literal Blocks

នៅក្នុង YAML multiple lines អាចនឹងបង្ហាញជា literal blocks ហើយជា default គឺ dumper នឹងធ្វើការ encode multiple lines ទៅជា inline string៖

អ្នកអាចធ្វើអោយវាប្រើនូវ literal block ជាមួយនឹង DUMP_MULTI_LINE_LITERAL_BLOCK flag៖

.ង) ការ Parse PHP Constants

ជា default គឺ YAML parser treats នូវ PHP constants ដែលបញ្ចូលទៅក្នុង contents ជា regular strings។ ប្រើនូវ PARSE_CONSTANT flag និង !php/const: syntax ពិសេសដើម្បីញែកពួកគេជា proper PHP constants៖

.ច) Syntax Validation

Syntax នៃ YAML contents អាចនឹងធ្វើការ validated តាមរយៈ CLI ដោយប្រើប្រាស់ LintCommand command។

ជាដំបូង គឺធ្វើការតម្លើងនូវ Console component៖

បង្កើតនូវ console application ជាមួយនឹង lint:yaml

បន្ទាប់មកទៀត ធ្វើការ execute នូវ script សម្រាប់ធ្វើការ validate contents៖

លទ្ធផលគឺត្រូវបានសរសេរទៅជា STDOUT និងប្រើនូវ plain text format ដោយ default។ បន្ថែមនូវ –format option ដើម្បីទទួលបាននូវលទ្ធផលជា JSON format៖