Saya sedang mengerjakan beberapa ekstensi Magento 2 yang membutuhkan membaca file dari sistem file.
Saat menjalankan sniffer php menggunakan standar ECGM2, ia mengeluh tentang fakta bahwa saya menggunakan fungsi seperti basename
atau dirname
.
Penggunaan fungsi dirname () dilarang
atau
Penggunaan fungsi basename () dilarang
Wrapper apa yang harus saya gunakan dan bukan untuk mendapatkan efek yang sama?
[EDIT]
Berikut ini beberapa kode, tetapi tidak relevan dengan pertanyaan itu.
Saya memiliki kelas koleksi yang memperluas \Magento\Framework\Data\Collection\Filesystem
kelas dan saya ingin mendaftar koleksi ini dalam kotak (ui-komponen) dan salah satu tindakan dalam kotak adalah tindakan mengunduh.
Untuk ini, saya perlu mendapatkan nama file yang sebenarnya sehingga saya dapat mengirimkannya ke tindakan unduhan.
// here $file is dynamic and it can be
// folder/filename.xml or folder/subfolder/file.tar.gz
//so there is no strict number of folders and subfolders.
$file = $downloader->getRelativePath($packageName);
$relativeFile = UmcFilesystem::VAR_DIR_NAME . '/' .$file;
$absoluteFile = $rootDir->getAbsolutePath($relativeFile);
if ($rootDir->isFile($relativeFile) && $rootDir->isReadable($relativeFile)){
//I don't want to use `explode` just for the sake of avoiding basename
$fileName = basename($absoluteFile);
$this->fileFactory->create(
$fileName,
null,
DirectoryList::VAR_DIR,
'application/octet-stream',
$rootDir->stat($relativeFile)['size']
);
$resultRaw = $this->resultRawFactory->create();
$resultRaw->setContents($rootDir->readFile($relativeFile));
return $resultRaw;
} else {
...
}
sumber
basename
di sana. Silakan baca pertanyaan dengan seksama.Jawaban:
Saya juga membutuhkan sesuatu seperti itu baru-baru ini. Satu-satunya solusi yang saya temukan
basename
dan dapatkandirname
:Sebelumnya saya mencoba menggunakan
Magento\Framework\Filesystem\Directory\Write
dangetDriver()
tidak berhasil. Dengan mereka Anda bisa mendapatkan hampir semuanya tetapi tidakbasename
.sumber
\Magento\Framework\Filesystem\Io\File
disuntikkan di kelas saya sendiri untuk fungsi yang berbeda. Saya hanya tidak tahu di muka tentanggetPathInfo
metode ini.Untungnya git memungkinkan kita melihat kapan dirname dan nama bas dilarang , alasannya jelas, "File yang ditambahkan"
Melihat masalah untuk proyek EKG Anda dapat melihat masalah tertutup seperti sesuatu yang buruk di file_exists? # 33 , Fungsi Kesalahan # 26 , ada sesuatu yang buruk dalam fungsi ini? # 17 , Konteks / Penjelasan untuk Aturan # 12 , Penggunaan iconv fungsi () dilarang # 14 yang akan membuat saya berpikir bahwa daftar awal fungsi terlarang tidak terlalu dipertimbangkan, dan magento mungkin bisa diubah daftar terlarang.
Mencari basis kode m2 menunjukkan ~ = 78 hasil untuk nama bas, campuran variabel dan kode yang memanggil nama bas, termasuk favorit saya .
Saya pikir jika saya adalah Anda, saya akan memposting masalah di github dan bertanya pada Zlik apakah dia masih berpikir mereka termasuk di sana atau jika M2 menyediakan pembungkus
sumber
Anda dapat menggunakan objek
SplFileInfo()
kelas mungkin itu akan berhasil.mungkin itu akan berhasil.
Anda juga dapat merujuk url ini .
sumber
Saran saya adalah menggunakan
Magento/Backup
modul sebagai contoh.Cara kelas tindakan unduhan ditulis akan menarik untuk dilihat karena juga berkaitan dengan file nyata untuk diunduh:
Bagi saya, Anda harus melihat cara metode ini menghasilkan file untuk diunduh menggunakan
\Magento\Framework\App\Response\Http\FileFactory
dangenerateBackupDownloadName
dariMagento\Backup\Helper\Data
(perhatikan penggunaan OM yang direkomendasikan;))Bagian lain yang menarik
Hal lain yang menarik yang harus Anda perhatikan adalah
getStorageData
metode dariMagento\MediaStorage\Model\ResourceModel\File\Storage\File
mana ia memanggil langsungdirname
danbasename
tetapi jika Anda memanggil metode inti dalam modul Anda, Anda tidak akan mendapatkan kesalahan terlarang;)Dalam ide yang sama, ada juga yang
collectFileInfo
dariMagento\MediaStorage\Helper\File\Media
sumber
generateBackupDownloadName
menggunakan beberapa getter ajaib dari model cadangan. Jadi mereka harus memiliki setter sihir yang dipanggil sebelumnya. Saya tidak melihat apa pun yang terkait dengan nama merek atau alternatifnya.collectFileInfo
dariMagento\MediaStorage\Helper\File\Media
;)collectFileInfo
tidak akan membantu saya karena mengharapkan file di dalam folder media. Milik saya ada di dalam folder var. JugagetStorageData
tidak ada hubungannya dengan apa yang saya butuhkan. Saya tidak ingin mengumpulkan semua file dalam folder. Saya sudah memiliki nama file.