วิธีการลบไฟล์หรือรูปภาพในวีโอไอพี 2. ฉันรู้ว่าการใช้unlink('full file path');
จะลบไฟล์ แต่ผมต้องการที่จะทำวีโอไอพี 2 วิธี สภาพเมื่อผู้ใช้ ลบchecked
checkbox
วิธีการลบไฟล์หรือรูปภาพในวีโอไอพี 2. ฉันรู้ว่าการใช้unlink('full file path');
จะลบไฟล์ แต่ผมต้องการที่จะทำวีโอไอพี 2 วิธี สภาพเมื่อผู้ใช้ ลบchecked
checkbox
คำตอบ:
คำถามที่สำคัญมากเช่นเดียวกับในประสบการณ์ของฉันเมื่อส่งส่วนขยายสำหรับตลาดการตรวจสอบสร้างข้อผิดพลาดเกี่ยวกับการใช้วิธีการดังกล่าวโดยตรง ฉันค้นคว้าและพบวิธีแก้ปัญหาต่อไปนี้แล้ว
ฉีดนี้\Magento\Framework\Filesystem\Driver\File $file
ในตัวสร้างของคุณ
(ตรวจสอบให้แน่ใจว่าประกาศตัวแปรระดับชั้นเช่นprotected $_file;
)
และจากนั้นคุณสามารถเข้าถึงวิธีการซึ่งรวมถึง: isExists
และdeleteFile
ตัวอย่างเช่น: in constructor
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
}
}