magento 2のphtmlファイルでメディアディレクトリパスを取得する方法は?


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

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

それは、このようなエラーを返す「キャッチされない例外TypeErrorを:名前空間\モジュール\コントローラ\インデックス\アップロードに渡される引数2 :: __構築物()、Magentoの\ Frameworkの\ファイルシステム、与えられたなしのインスタンスでなければなりません」
リタ・ホセ

はい、di:compileを再試行して、もう一度やり直してください:)
Keyur Shah

di:compile done、しかし再びエラーを返します:(「回復可能なエラー:クラスMagento \ Framework \ Filesystem \ Directory \ Readのオブジェクトは/ opt / lampp / htdocs / magento214 / app / code / namespaceの文字列に変換できませんでしたライン18"上の/Customtab/Controller/Index/Upload.php
リタ・ホセ

あなたが直接オブジェクトマネージャを使用したい場合は@RitaJose、私の編集を参照してください
Keyurシャー

すごい:D ..Thanksたくさん..編集した1つの作品の罰金:)
リタ・ホセ

7

まず、Magento 2コンストラクターにDirectoryListクラスを挿入する必要があります。

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を返します...私は、メディアのフォルダパス必要
リタ・ホセ

更新された回答をご覧ください。
Mohit Kumarアローラ

動作しなくなるまで。
Sarfaraj Sipai

ありがとう@MohitKumarArora-私の日を救った。上記のソリューションは魅力のように機能しました
アビッドマリク

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

2
それは..私はメディアのフォルダパスを必要とするブラウザのURLパスを返します
リタ・ホセ

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.