วิธีรับเส้นทางไดเรกทอรีสื่อในไฟล์ phtml ใน magento 2


14

ใช้วิธีการด้านล่างเพื่อรับเส้นทางไดเรกทอรีสื่อแต่มันกลับข้อผิดพลาด

$om = \Magento\Core\Model\ObjectManager::getInstance();

$directoryList = $om->get(\Magento\App\Filesystem\DirectoryList::class);

$pubMediaDir = $directoryList->getPath(\Magento\App\Filesystem\DirectoryList::MEDIA);

โปรดช่วยฉันหาวิธีแก้ปัญหา


1
คำถามของคุณไม่ชัดเจนสำหรับฉัน คุณสามารถอธิบายรายละเอียดเพิ่มเติมได้หรือไม่ นอกจากนี้เรายังสามารถดูได้ที่: magento.stackexchange.com/a/155238/33057
Khoa TruongDinh

คำตอบ:


23

แทนที่จะใช้โดยตรงobject managerให้ใช้เหมือน

use Magento\Framework\App\Filesystem\DirectoryList;

protected $_filesystem;

public function __construct(
    \Magento\Framework\Filesystem $filesystem
)
{
    $this->_filesystem = $filesystem;
}

ตอนนี้คุณสามารถใช้เส้นทางสื่อด้วย

$mediapath = $this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath();

แก้ไข

หากคุณต้องการใช้Object Managerคุณสามารถใช้สิ่งนี้ได้ (ไม่แนะนำ)

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

$fileSystem = $objectManager->create('\Magento\Framework\Filesystem');
$mediaPath = $fileSystem->getDirectoryRead(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA)->getAbsolutePath();
echo $mediaPath;
exit;

มันส่งกลับข้อผิดพลาดเช่นนี้ "Uncaught TypeError: ส่งผ่านอาร์กิวเมนต์ 2 ไปยังเนมสเปซ \ Module \ Controller \ ดัชนี \ อัปโหลด :: __ โครงสร้าง () ต้องเป็นอินสแตนซ์ของ Magento \ Framework \ Filesystem, ไม่ได้รับ"
Rita Jose

ใช่ลอง di: คอมไพล์แล้วลองอีกครั้ง :)
Keyur Shah

di: คอมไพล์แล้ว แต่จะส่งคืนข้อผิดพลาดอีกครั้ง :( "ข้อผิดพลาดที่กู้คืนได้: วัตถุของคลาส Magento \ Framework \ Filesystem \ Directory \ Read ไม่สามารถแปลงเป็นสตริงใน / opt / lampp / htdocs / magento214 / app / code / namespace /Customtab/Controller/Index/Upload.php ที่บรรทัด 18 "
Rita Jose

ดูการแก้ไขของฉันหากคุณต้องการใช้ตัวจัดการวัตถุโดยตรง @RitaJose
Keyur Shah

ว้าววว: D ..Thanks มาก .. ที่แก้ไขผลงานดี :)
ริต้าโฮเซ่

7

ก่อนอื่นคุณจะต้องฉีดคลาส DirectoryList ลงในตัวสร้าง Magento 2 ของคุณ:

public function __construct(\Magento\Framework\View\Element\Template\Context $context, \Magento\Framework\App\Filesystem\DirectoryList $directory_list, array $data = []) {
     parent::__construct($context, $data);
     $this->directory_list = $directory_list;  
 }

หลังจากนั้นคุณจะสามารถเข้าถึงวิธีการ DirectoryList สำหรับดึงข้อมูลเส้นทางต่างๆ ตัวอย่างเช่นหากต้องการรับโฟลเดอร์สื่อคุณสามารถใช้:

$this->directory_list->getPath('media');

การใช้ที่เป็นไปได้อื่น ๆ คือ:

/* Get app folder */
$this->directory_list->getPath('app');

/* Get configuration folder */
$this->directory_list->getPath('etc');

/* Get libraries or third-party components folder */
$this->directory_list->getPath('lib_internal');

/* Get libraries/components that need to be accessible publicly through web-server folder */
$this->directory_list->getPath('lib_web');

/* Get public folder */
$this->directory_list->getPath('pub');

/* Get static folder */
$this->directory_list->getPath('static');

/* Get var folder */
$this->directory_list->getPath('var');

/* Get temporary files folder */
$this->directory_list->getPath('tmp');

/* Get file system caching directory (if file system caching is used) */
$this->directory_list->getPath('cache');

/* Get logs of system messages and errors */
$this->directory_list->getPath('log');

/* Get file system session directory (if file system session storage is used) */
$this->directory_list->getPath('session');

/* Get directory for Setup application*/
$this->directory_list->getPath('setup');

/* Get Dependency injection related file directory */
$this->directory_list->getPath('di');

/* Relative directory key for generated code*/
$this->directory_list->getPath('generation');

/* Temporary directory for uploading files by end-user */
$this->directory_list->getPath('upload');

/* Directory to store composer related files (config, cache etc.) in case if composer runs by Magento Application */
$this->directory_list->getPath('composer_home');

/* A suffix for temporary materialization directory where pre-processed files will be written (if necessary) */
$this->directory_list->getPath('view_preprocessed');

/* Get template minification dir */
$this->directory_list->getPath('html');

มันคืนค่า URL ของเบราว์เซอร์ ... ฉันต้องการเส้นทางโฟลเดอร์ของสื่อ
Rita Jose

โปรดดูคำตอบที่อัปเดตของฉัน
Mohit Kumar Arora

จนกว่าจะไม่ทำงาน
Sarfaraj Sipai

ขอบคุณ @MohitKumarArora - ช่วยชีวิตฉันไว้ วิธีการแก้ปัญหาข้างต้นทำงานได้อย่างมีเสน่ห์
Abid Malik

6

ใช้โค้ดด้านล่างเพื่อรับเส้นทางสื่อในไฟล์. phtml

$this->getUrl('pub/media');

โดย Objectmanager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
echo $objectManager->get('Magento\Store\Model\StoreManagerInterface')
                    ->getStore()
                    ->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);

3
มันกลับเส้นทาง url เบราว์เซอร์ .. ฉันต้องการเส้นทางโฟลเดอร์ของสื่อ
Rita Jose

6

ลองรับโดยใช้StoreManagerInterface

use Magento\Store\Model\StoreManagerInterface;
protected $storeManager;

public function __construct(
    StoreManagerInterface $storeManager,
)
{
    $this->storeManager = $storeManager;
}

ตอนนี้รับ URL สื่อโดยใช้

 $mediaUrl = $this->storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);

ไม่ทำงาน .....
Sarfaraj Sipai
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.