Bagaimana cara mendapatkan jalur direktori media dalam file phtml di magento 2?

14

Menggunakan metode di bawah ini untuk mendapatkan jalur direktori media , tetapi ia mengembalikan kesalahan.

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

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

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

Tolong bantu saya untuk menemukan solusi.

Rita Jose
sumber
1
Pertanyaan Anda tidak jelas bagi saya. Anda bisa menjelaskan lebih detail? Selain itu, kita dapat melihatnya: magento.stackexchange.com/a/155238/33057
Khoa TruongDinh

Jawaban:

23

Alih-alih menggunakan langsung object manager, gunakan itu suka

use Magento\Framework\App\Filesystem\DirectoryList;

protected $_filesystem;

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

Sekarang Anda dapat jalur media dengan,

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

EDIT

Jika Anda ingin menggunakan Object Manager , maka Anda dapat menggunakan ini (tidak disarankan)

$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;
Keyur Shah
sumber
ia mengembalikan kesalahan seperti ini "UnEught TypeError: Argumen 2 diteruskan ke namespace \ Module \ Controller \ Index \ Upload :: __ construct () harus merupakan turunan dari Magento \ Framework \ Filesystem, tidak ada yang diberikan,"
Rita Jose
ya, coba di: kompilasi dan coba lagi :)
Keyur Shah
di: kompilasi selesai, tetapi sekali lagi mengembalikan kesalahan :( "Kesalahan Dapat Dipulihkan: Objek kelas Magento \ Framework \ Filesystem \ Directory \ Baca tidak dapat dikonversi ke string di / opt / lampp / htdocs / magento214 / app / code / namespace /Customtab/Controller/Index/Upload.php on line 18 "
Rita Jose
lihat edit saya, Jika Anda ingin menggunakan manajer objek langsung @RitaJose
Shah
wow: D .. Terima kasih banyak .. Yang diedit bekerja dengan baik :)
Rita Jose
7

Pertama, Anda perlu menyuntikkan kelas DirectoryList ke dalam konstruktor Magento 2 Anda:

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

Setelah itu Anda akan memiliki akses ke metode DirectoryList untuk mengambil berbagai jalur. Misalnya, untuk mendapatkan folder media yang dapat Anda gunakan:

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

Kemungkinan penggunaan lainnya adalah:

/* 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');
Mohit Kumar Arora
sumber
ia mengembalikan url browser dari media ... saya perlu path folder media
Rita Jose
Silakan lihat jawaban saya yang diperbarui.
Mohit Kumar Arora
sampai tidak bekerja.
Sarfaraj Sipai
Terima kasih @MohitKumarArora - menyelamatkan hari saya. solusi di atas bekerja seperti pesona
Abid Malik
6

Gunakan kode di bawah ini untuk mendapatkan jalur media pada file .phtml.

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

Oleh Objectmanager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
echo $objectManager->get('Magento\Store\Model\StoreManagerInterface')
                    ->getStore()
                    ->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
rajat kara
sumber
2
Ia mengembalikan path url browser .. Saya perlu path folder media
Rita Jose
6

Cobalah untuk mendapatkannya dengan menggunakan StoreManagerInterface

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

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

Sekarang dapatkan url media menggunakan

 $mediaUrl = $this->storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
swathi_sri
sumber
tidak bekerja .....
Sarfaraj Sipai