Magento 2: як видалити зображення або файл


9

як видалити файл або зображення в magento 2. Я знаю, що за допомогою unlink('full file path');видалить файл, але я хочу зробити magento 2 способом . умова, коли користувач checkedвидаляє checkbox.

Відповіді:


15

Дуже важливе питання, як на моєму досвіді, під час подання розширення на ринок, перевірка помилок у використанні такого методу безпосередньо. Я дослідив і знайшов наступне рішення.

\Magento\Framework\Filesystem\Driver\File $fileвведіть це у свій конструктор

(не забудьте оголосити змінну рівня класу, тобто protected $_file;)

і тоді ви можете мати доступ до методів, які включають: isExistsіdeleteFile

наприклад: у конструкторі

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

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

а потім у методі, де ви намагаєтесь видалити файл:

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

сподіваюся, що це допомагає.


як отримати абсолютний шлях тоді?
Qaisar Satti

дозвольте мені відредагувати відповідь.
RT

2
Це працює як шарм !!
Налін Савалія

6

Відповідь RT хороша, але ми не повинні використовувати ObjectManager безпосередньо у прикладі.

Причина тут - " Magento 2: використовувати або не використовувати безпосередньо ObjectManager ".

Тож кращий приклад наведено нижче:

<?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
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.