ស្វែងយល់អំពី Filesystem Component នៅក្នុង Symfony 3

Filesystem component ផ្ដល់នូវឧបករណ៏ដែលមានលក្ខណៈជាមូលដ្ឋានគ្រឹះសម្រាប់ filesystem។ នៅក្នុងអត្ថបទនេះ Techfree នឹងធ្វើការណែនាំលោកអ្នកអំពីរបៀបនៃការតម្លើង Filesystem component របៀបនៃការប្រើប្រាស់ និងសកម្មភាពមួយចំនួនទៀតដែលទាក់ទងទៅនឹងការបើករឺកំណត់សិទ្ធ (permission)​ ផ្សេងៗ ការ Copy files ការ remove ការ rename ការបង្កើត directory ការកែប្រែម្ចាស់នៃ folder និងមានសកម្មភាពជាច្រើនទៀតដែលនឹងត្រូវបានរៀបរាប់ដូចខាងក្រោម។

១) ការតម្លើង Filesystem component

មាន ២ វិធីសាស្ដ្រដែលអ្នកអាចធ្វើការតម្លើង Filesystem component បាន៖

ទី១៖ តម្លើងតាមរយៈ Composer (symphony/filesystem នៅលើ កញ្ចប់ មួយនេះ)

ទី២៖ ទាញយកពី official Git repository (https://github.com/symfony/filesystem)

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

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

Filesystem class គឺ unique endpoint សម្រាប់ filesystem operations៖

ចំណាំ៖ Methods mkdir(), exists(), touch(), remove(), chmod(), chown(), និង chgrp() អាចទទួលយកនូវ string, array រឺក៏ object ដែលកំពុងធ្វើការ implement Traversable ណាមួយផ្សេងទៀតជា target argument។

.ក) mkdir

mkdir() សម្រាប់បង្កើត directory ដោយខ្លួនឯង។ នៅលើ POSIX filesystems, directories ដែលបានបង្កើតរួចជាមួយនឹង default mode ដែលមានតម្លៃ 0777 ។ អ្នកអាចប្រើនូវ argument ទី២ ដើម្បីកំណត់ mode ផ្ទាល់ខ្លួនរបស់អ្នក៖

ត្រូវចាំថា អ្នកអាចធ្វើការ pass នូវ array រឺក៏ Traversable object ជា argument ទី១បាន។

.ខ) exists

exists() ធ្វើការពិនិត្យនូវវត្តមាននៃ files រឺក៏ directories ទាំងអស់និង returns false ប្រសិនបើមិនមាន file ណាមួយទេនោះ។

.គ) Copy

copy() គឺប្រើសម្រាប់ការ copy files។ ប្រសិនបើ target មានរួចរាល់ហើយនោះ file គឺបានត្រឹមតែ copied តែប៉ុណ្ណោះ ប្រសិនបើថ្ងៃដែល source ធ្វើការកែប្រែតូចជាង target។ លក្ខណៈបែបនេះអាចនឹង overridden ដោយ Boolean argument ទី៣៖

.ឃ) touch

touch() កំណត់នូវការ access និងការកែប្រែពេលវេលានៃ file។ current time គឺត្រូវបានប្រើដោយ default។ អ្នកអាចកំណត់ដោយខ្លួនអ្នកផ្ទាល់ជាមួយនឹង argument ទី២។ Argument ទី៣ គឺ access time៖

.ង)​ chown

chown() គឺប្រើសម្រាប់ការកែប្រែនូវម្ចាស់កម្មសិទ្ធនៃ file។ Argument ទី៣ គឺជា Boolean recursive option៖

.ច) chgrp

chgrp() គឺប្រើសម្រាប់កែប្រែនូវ group នៃ file។ Argument ទី៣ គឺជា Boolean recursive option៖

.ឆ) chmod

chmod() គឺប្រើសម្រាប់កែប្រែនូវ mode នៃ file។ Argument ទី៤ គឺជា Boolean recursive option៖

.ជ) remove

remove() គឺប្រើដើម្បីធ្វើការ remove files, symlinks និង directories យ៉ាងងាយស្រួល៖

.ឈ) rename

rename() គឺប្រើដើម្បីកែឈ្មោះ files និង directories៖

.ញ) symlink

symlink() គឺបង្កើតនូវ symbolic link (និមិត្តសញ្ញា) ពី target ទៅកាន់ គោលដៅ (destination)។ ប្រសិនបើ filesystem មិនបាន support នូវ symbolic links ទេនោះគឺ Boolean argument ទី៣ គឺ available៖

.ដ) readlink

អ្វីដែលថ្មីដែលមានក្នុង version 3.2៖ readlink() method ដែលបានណែនាំរួចមកហើយក្នុង Symfony 3.2។

readlink() read link targets។

readlink() function របស់ PHP គឺ returns នូវ target នៃ symbolic link។ តែទោះជាយ៉ាងណា លក្ខណៈរបស់វា គឺខុសគ្នាទាំងស្រុងនៃ Windows និង Unix។ នៅលើ Windows systems, readlink() ធ្វើការដោះស្រាយបញ្ហាដោយភ្ជាប់ត្រលប់ទៅកាន់ links កូននៃ link រហូតទៅដល់ target ចុងក្រោយត្រូវបានរកឃើញ។ នៅលើ Unix-based systems readlink() គឺដោះស្រាយតែ link បន្ទាប់ពីនោះ តែប៉ុណ្ណោះ។

readlink() method បានផ្ដល់ដោយ Filesystem component ដែលតែងតែមានសកម្មភាពក្នុងវិធីតែមួយ៖

លក្ខណៈសកម្មភាពរបស់វាគឺដូចរូបភាពខាងក្រោម៖

នៅពេលដែល $canonicalize គឺ false៖

  • ប្រសិនបើ $path មិនទាន់មានរឺក៏ មិនមែនជា Link វានឹង returns ជា null
  • ប្រសិនបើ $path គឺជា Link នោះវានឹង returns នូវ target បន្ទាប់ដោយផ្ទាល់នៃ link ដោយមិនគិតអំពី អ្វីដែលមានរួចហើយនៃ target ។

នៅពេលដែល មាន$canonicalize គឺ true៖

  • ប្រសិនបើ $path មិនទាន់មាន វានឹង returns null។
  • ប្រសិនបើ $path មានរួចហើយ វានឹង returns នូវអ្វីដែលបានដោះស្រាយដោយពេញលេញចុងក្រោយបង្អស់។

.ថ) makePathRelative

makePathRelative() returns នូវ ទីតាំងដែលជាប់ពាក់ព័ន្ធនៃ directory ដែលផ្ដល់ដោយអ្នកផ្សេងមួយទៀត៖

.) mirror

mirror() mirror នូវ directory៖

.) isAbsolutePath

isAbsolutePath() returns true ប្រសិនបើការផ្ដល់នូវទីតាំងគឺជា absolute,បើមិនអញ្ជឹងទេគឺ false

.) dumpFile

dumpFile() អនុញ្ញាតអោយអ្នកធ្វើការ dump contents ទៅកាន់ file។ វាធ្វើបែបនេះក្នុង atomic manner: វា write នូវ file បណ្ដោះអាសន្ននិងបន្ទាប់មកទៀតគឺ move វាចេញទៅកាន់ ទីតាំង file ថ្មីពេលដែលវាបានបញ្ចប់។ មានន័យថា user នឹងតែងតែឃើញ នូវ file ចាស់រឺក៏ file ថ្មី៖

File.txt file ផ្ទុកនូវ Hello World នាពេលនេះ។

៣) Error Handling

នៅពេលដែលកំហុសកើតមានឡើង exception ធ្វើការ implement ExceptionInterface រឺក៏ IOExceptionInterface គឺត្រូវបោះចោល។