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

Asset component គ្រប់គ្រងនូវ ជំនាន់នៃ URL និង ជំនាន់នៃ web assets ដូចជា CSS stylesheets, JavaScript files និង files រូបភាព។  កាលពីមុន វាជារឿងធម្មតាសម្រាប់ web applications ក្នុងការ hardcode URLs នៃ web assets។ ឧទាហរណ៏៖

ការអនុវត្តន៏មួយនេះ គឺមិនត្រូវបានណែនាំអោយប្រើយូរទៀតនោះទេ លុះត្រាតែ web application មានលក្ខណៈសាមញ្ញបំផុត។ ការ hardcode URLs អាចនឹងមានគុណវិបត្តិដោយសារតែ៖

ទី១៖ Templates get verbose៖ អ្នកត្រូវសរសេរនូវទីតាំងពេញលេញនូវ asset នីមួយៗ។ ពេលប្រើប្រាស់ Asset component អ្នកក៏អាចចាត់ assets ជាក្រុមក្នុង packages ដើម្បីជៀងវាងការធ្វើឡើងវិញនូវទីតាំងរួមនៃ ទីតាំងរបស់ពួកគេ។

ទី២៖ Versioning is difficult៖ វាអាចត្រូវបានគ្រប់គ្រងការ custom សម្រាប់ application នីមួយៗ។ ការបន្ថែមនូវ version ដើម្បីអោយ​ asset URLs គឺចាំបាច់សម្រាប់ applications មួយចំនួនព្រោះវាអនុញ្ញាតអោយអ្នកក្នុងការគ្រប់គ្រងនូវ របៀបនៃ assets ជា cached។ Asset component ព្រមអោយអ្នកកំណត់នូវ versioning strategies សម្រាប់ package ផ្សេងៗគ្នា។

ទី៣៖ Moving assets location គឺមានភាពស្មុគស្មាញនិងងាយនឹងមាន error គឺវាទាមទារអោយអ្នកមានការ update នូវ URLs នៃ assets បញ្ចូលទៅក្នុង templates យ៉ាងយកចិត្តទុកដាក់។ Asset component អាចអោយអ្នកធ្វើការផ្លាស់ប្ដូរនូវ assets បានដោយគ្រាន់តែប្ដូរនូវ តម្លៃនៃ ទីតាំងដេលទាក់ទងជាមួយនឹង package នៃ assets។

ទី៤៖ It’s nearly impossible to use multiple CDNs៖ វិធីសាស្ត្រនេះទាមទារអោយអ្នកកែប្រែនូវ URL ណៃ asset ដែលផ្លាស់ប្ដូរគ្នាសម្រាប់ការស្នើរនីមួយៗ។ Asset component ផ្ដល់នូវ out-of-the-box support សម្រាប់លេខផ្សេងទៀតនៃ CDNs ច្រើន ទាំង ទៀងទាត់ (http://) និងសុវត្ថិភាព (https://)។

១) ការតម្លើង

អ្នកអាចតម្លើងនូវ component តាមវិធី ២ផ្សេងគ្នា៖

ទី១ គឺតម្លើងវាតាមរយៈ Composer (symphony/asset នៅលើ Packagist)

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

២) ការប្រើប្រាស់

ក) Asset Packages

Asset component គ្រប់គ្រង assets តាមរយៈ packages។ Package ធ្វើការចាត់ក្រុមនូវ assets ទាំងអស់ដែលធ្វើការចែករំលែងនូវ properties ដូចគ្នា ដូចជា versioning strategy, base path, CDN hosts, និងមានច្រើនទៀត។ ក្នុងឧទាហរណ៏ខាងក្រោម package គឺបានបង្កើតដើម្បីគ្រប់គ្រង assets ដោយមិនមាន versioning ណាមួយ៖

Packages implement PackageInterface ដែលកំណត់នូវ ២ methods ខាងក្រោម៖

getVersion() បញ្ចូនមកវិញនូវ asset version សម្រាប់ asset

getUrl() បញ្ចូនមកវិញនូវ absolute រឹក៏ root-relative public path

ជាមួយនឹង package អ្នកអាច៖

ក) version the assets

ខ) កំណត់ common base path សម្រាប់ assets

គ) ធ្វើការ configure CDN សម្រាប់ assets

ផ្នែកមួយនៃ features ដ័សំខាន់នៃ Asset component គឺមានសមត្ថភាពក្នុងការគ្រប់គ្រងនូវ versioning នៃ assets របស់ application។ Asset versions ជាទូទៅគឺប្រើដើម្បីមើលទៅលើរបៀបនៃ assets ធ្វើការជា cached។

ជំនួសអោយការពឹងផ្អែកទៅលើ version mechanism សាមញ្ញមួយ Asset component ព្រមអោយអ្នកកំណត់នូវ versioning strategies តាមរយៈ PHP classes។ built-in strategies ចំនួន២ ដែលជា EmptyVersionStrategy ដែលមិនបន្ថែមនូវ version ណាមួយទៅ asset និង StaticVersionStrategy ដែលអនុញ្ញាតអោយអ្នកកំណត់នូវ version ជាមួយនឹងទម្រង់ជា string។

ក្នុងឧទាហរណ៏នេះ StaticVersionStrategy គឺបានប្រើដើម្បី បន្ថែមខាងចុង v1 ទៅកាន់ asset path ផ្សេងទៀត៖

ក្នុងដំណាក់កាលនេះអ្នកត្រូវការកែប្រែនូវ ទម្រង់នៃ version, pass sprint-compatible format string ទៅជា argument ទីពីរនៃ StaticVersionStrategy constructor៖

ការ custom Version Strategies

ប្រើប្រាស់នូវ VersionStrategyInterface ដើម្បីកំណត់ versioning strategy ផ្ទាល់ខ្លួនរបស់អ្នក។ ឧទាហរណ៏ថា application របស់អ្នកប្រហែលជាត្រូវការបន្ថែមខាងចុងនូវកាលបរិច្ឆេទនាពេលបច្ចុប្បន្ន ទៅ web assets របស់វាទាំងអស់៖

Grouped Assets

ជាញឹកញាប់ assets មួយចំនួនស្ថិតនៅក្នុងទីតាំងជាទូទៅគឺ (/static/images)។ ប្រសិនបើអ្នកជួបដូចនេះ គឺអាចធ្វើការជំនួសនូវ default Package class ជាមួយនឹង PathPackage ដើម្បីជៀសវាងនូវការធ្វើឡើងវិញនូវទីតាំងនោះម្ដងហើយម្ដងទៀត៖

Absolute Assets និង CDNs

Application ដែល host នូវ assets របស់ពួកគេនៅលើ domains និង CDNs (Content Delivery Networks) ផ្សេងគ្នាគួរតែប្រើនូវ UrlPackage class ដើម្បី បង្កើតនូវ absolute URLs សម្រាប់ assets របស់ពួកគេ៖

អ្នកក៏អាច pass នូវ schema-agnostic URL បានផងដែរ៖

វាគឺពេញនិយមព្រោះតែ assets នឹងធ្វើការស្នើរដោយស្វ័យប្រវត្តិតាមរយៈ HTTPS ប្រសិនបើអ្នកទស្សនាគឺកំពុងតែមើលលើទំព័ររបស់អ្នកក្នុង https។ តែអ្នកត្រូវប្រាកដថា CDN host របស់អ្នកគឺ supports នូវ https។

ក្នុងដំណាក់កាលនេះ អ្នកអាចចែកចាយ assets ពី domain លើសពីមួយដើម្បីបង្កើននូវ ដំណើរការនៃ application ហើយ pass នូវ array នៃ URLs ជា argument ទីមួយទៅកាន់ UrlPackage constructor៖

សម្រាប់ asset នីមួយៗ គឺមាន URLs មួយដែលនឹងត្រូវបាន random ក្នុងការប្រើ​ ប៉ុន្តែការជ្រើសរើសនេះគឺ មានកត្តាដែលត្រូវកំណត់ មានន័យថា asset នីមួយៗនឹងត្រូវបានចែកចាយដោយ domain ដូចៗគ្នា។ កត្តាបែបនេះហើយគឺសម្រួលដល់ការគ្រប់គ្រងនូវ HTTP cache។

Named Packages

Applications ដែលគ្រប់គ្រងនូវ assets ផ្សេងៗគ្នាជាច្រើននោះប្រហែលជាត្រូវការនូវការចាត់ថ្នាក់ពួកគេទៅក្នុង packages ជាមួយនឹង versioning strategy និង base path ដូចគ្នា។ Asset component បញ្ចូលនូវ Packages class ដើម្បីសម្រួលដល់ការគ្រប់គ្រងនូវ packages ច្រើន។

ឧទាហរណ៏ខាងក្រោម packages ទាំងអស់ប្រើនូវ versioning strategy ដូចគ្នាតែ ពួកគេ មាន base path ខុសៗពីគ្នា៖

Packages class នេះព្រមអោយអ្នកនូវការកំណត់នូវ default package ដែលនឹងដាក់អនុវត្តន៏ទៅកាន់ assets ដែលមិនកំណត់នូវឈ្មោះនៃ package ដើម្បីប្រើ។ លើសពីនេះទៅទៀត application នេះកំណត់នូវឈ្មោះ package img ដើម្បីចែកចាយនូវ រូបភាព ពី domain ខាងក្រៅ និង doc package ដើម្បីជៀសវាងនូវការធ្វើឡើងវិញម្ដងទៀតនូវ path ដែលវែងពេលធ្វើការភ្ជាប់ទៅកាន់ ឯកសារខាងក្នុង template៖