Magento 2: jak usunąć obraz lub plik

9

jak usunąć plik lub obraz w Magento 2. Wiem, że użycie unlink('full file path');spowoduje usunięcie pliku, ale chcę zrobić Magento 2 sposób . warunek, kiedy Użytkownik checkedusunie checkbox.

Qaisar Satti
źródło

Odpowiedzi:

15

Bardzo ważne pytanie, tak jak z mojego doświadczenia, podczas przesyłania rozszerzenia na rynek, walidacja generowała błędy dotyczące bezpośredniego korzystania z takiej metody. Poszukałem i znalazłem następujące rozwiązanie.

wstrzyknij to \Magento\Framework\Filesystem\Driver\File $filedo swojego konstruktora

(pamiętaj, aby zadeklarować zmienną na poziomie klasy, tj. protected $_file;)

a następnie możesz uzyskać dostęp do metod, które obejmują: isExistsideleteFile

na przykład: w konstruktorze

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

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

a następnie w metodzie, w której próbujesz usunąć plik:

$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);
}

mam nadzieję że to pomoże.

RT
źródło
jak więc uzyskać absolutną ścieżkę?
Qaisar Satti
pozwól mi edytować odpowiedź.
RT
2
To działa jak urok !!
Nalin Savaliya
6

Odpowiedź RT jest dobra, ale nie powinniśmy używać ObjectManager bezpośrednio w tym przykładzie.

Powodem jest tutaj „ Magento 2: używać lub nie używać bezpośrednio menedżera obiektów ObjectManager ”.

Lepszy przykład znajduje się poniżej:

<?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
źródło