Magento 2: cara menghapus gambar atau file

9

cara menghapus file atau gambar di magento 2. Saya tahu menggunakan unlink('full file path');akan menghapus file tetapi saya ingin melakukan 2 cara magento . kondisi ketika Pengguna checkedmenghapus checkbox.

Qaisar Satti
sumber

Jawaban:

15

Pertanyaan yang sangat penting seperti dalam pengalaman saya, ketika mengirimkan ekstensi untuk pasar, validasi menghasilkan kesalahan terkait penggunaan metode tersebut secara langsung. Saya telah meneliti dan menemukan solusi berikut.

menyuntikkan ini \Magento\Framework\Filesystem\Driver\File $filedi konstruktor Anda

(pastikan untuk mendeklarasikan variabel level kelas yaitu, protected $_file;)

dan kemudian Anda dapat memiliki akses ke metode yang meliputi: isExistsdandeleteFile

misalnya: dalam konstruktor

public function __construct(\Magento\Backend\App\Action\Context $context, 
            \Magento\Framework\Filesystem\Driver\File $file){

        $this->_file = $file;
        parent::__construct($context);
}

dan kemudian dalam metode di mana Anda mencoba untuk menghapus file:

$mediaDirectory = $this->_objectManager->get('Magento\Framework\Filesystem')->getDirectoryRead(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA);
$mediaRootDir = $mediaDirectory->getAbsolutePath();

if ($this->_file->isExists($mediaRootDir . $fileName))  {

    $this->_file->deleteFile($mediaRootDir . $fileName);
}

semoga ini membantu.

RT
sumber
bagaimana cara mendapatkan jalur absolut?
Qaisar Satti
izinkan saya mengedit jawabannya.
RT
2
Ini bekerja seperti pesona !!
Nalin Savaliya
6

Jawaban RT baik, tetapi kita tidak harus menggunakan ObjectManager secara langsung dalam contoh.

Alasannya ada di sini " Magento 2: untuk menggunakan atau tidak menggunakan ObjectManager secara langsung ".

Jadi contoh yang lebih baik adalah di bawah ini:

<?php
namespace YourNamespace;

use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\Filesystem\Driver\File;
use Magento\Framework\Filesystem;
use Magento\Framework\App\Filesystem\DirectoryList;

class Delete extends Action
{

    protected $_filesystem;
    protected $_file;

    public function __construct(
        Context $context,
        Filesystem $_filesystem,
        File $file
    )
    {
        parent::__construct($context);
        $this->_filesystem = $_filesystem;
        $this->_file = $file;
    }

    public function execute()
    {
        $fileName = "imageName";// replace this with some codes to get the $fileName
        $mediaRootDir = $this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath();
        if ($this->_file->isExists($mediaRootDir . $fileName)) {
            $this->_file->deleteFile($mediaRootDir . $fileName);
        }
        // other logic codes
    }
}
Key Shang
sumber