як видалити файл або зображення в magento 2. Я знаю, що за допомогою unlink('full file path');
видалить файл, але я хочу зробити magento 2 способом . умова, коли користувач checked
видаляє checkbox
.
як видалити файл або зображення в magento 2. Я знаю, що за допомогою unlink('full file path');
видалить файл, але я хочу зробити magento 2 способом . умова, коли користувач checked
видаляє checkbox
.
Відповіді:
Дуже важливе питання, як на моєму досвіді, під час подання розширення на ринок, перевірка помилок у використанні такого методу безпосередньо. Я дослідив і знайшов наступне рішення.
\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);
}
сподіваюся, що це допомагає.
Відповідь 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
}
}