Làm cách nào để lấy đường dẫn thư mục phương tiện trong tệp phtml trong magento 2?


14

Đã sử dụng phương thức dưới đây để lấy đường dẫn thư mục phương tiện , nhưng nó trả về lỗi.

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

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

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

Xin hãy giúp tôi tìm một giải pháp.


1
Câu hỏi của bạn không rõ ràng với tôi. Bạn có thể giải thích chi tiết hơn? Ngoài ra, chúng ta có thể xem: magento.stackexchange.com/a/155238/33057
Khoa TruongDinh

Câu trả lời:


23

Thay vì sử dụng trực tiếp object manager, hãy sử dụng Nó như

use Magento\Framework\App\Filesystem\DirectoryList;

protected $_filesystem;

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

Bây giờ bạn có thể đường dẫn phương tiện bằng cách,

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

BIÊN TẬP

Nếu bạn muốn sử dụng Trình quản lý đối tượng , thì bạn có thể sử dụng trình này (không được khuyến nghị)

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

nó trả về một lỗi như thế này "Uncaught TypeError: Argument 2 được chuyển đến không gian tên \ Module \ Controller \ Index \ Upload :: __ construc () phải là một phiên bản của Magento \ Framework \ Filesystem, không được đưa ra,"
Rita Jose

có, hãy thử di: biên dịch và thử lại :)
Keyur Shah

di: biên dịch xong, nhưng nó lại trả về errror :( "Lỗi có thể phục hồi: Không thể chuyển đổi đối tượng của lớp Magento \ Framework \ Filesystem \ Directory \ /Customtab/Controll/Index/Upload.php trên dòng 18 "
Rita Jose

xem chỉnh sửa của tôi, Nếu bạn muốn sử dụng trình quản lý đối tượng trực tiếp @RitaJose
Keyur Shah

wow: D .. Cảm ơn rất nhiều .. Người chỉnh sửa hoạt động tốt :)
Rita Jose

7

Trước tiên, bạn sẽ cần tiêm lớp DirectoryList vào hàm tạo Magento 2 của mình:

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

Sau đó, bạn sẽ có quyền truy cập vào các phương thức DirectoryList để lấy các đường dẫn khác nhau. Ví dụ: để lấy thư mục phương tiện, bạn có thể sử dụng:

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

Các ứng dụng khác có thể là:

/* 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');

nó trả về url trình duyệt của phương tiện truyền thông ... tôi cần đường dẫn thư mục của phương tiện
Rita Jose

Xin vui lòng xem câu trả lời cập nhật của tôi.
Mohit Kumar Arora

cho đến khi không làm việc
Sarfaraj Sipai

Cảm ơn bạn @MohitKumarArora - đã cứu tôi. giải pháp trên có tác dụng như bùa mê
Abid Malik

6

Sử dụng mã dưới đây để có được đường dẫn phương tiện trên tệp .phtml.

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

Bởi đối tượng

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

2
Nó trả về đường dẫn url của trình duyệt .. Tôi cần đường dẫn thư mục của phương tiện
Rita Jose

6

Hãy thử lấy nó bằng cách sử dụng StoreManagerInterface

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

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

Bây giờ nhận url phương tiện bằng cách sử dụng

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

không hoạt động .....
Sarfaraj Sipai
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.