Wie bekomme ich den Pfad des Medienverzeichnisses in einer HTML-Datei in Magento 2?

14

Verwendete die folgende Methode, um den Pfad des Medienverzeichnisses abzurufen, aber es wird ein Fehler zurückgegeben.

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

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

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

Bitte helfen Sie mir, eine Lösung zu finden.

Rita Jose
quelle
1
Ihre Frage ist mir nicht klar. Sie können weitere Details erklären? Außerdem können wir einen Blick darauf werfen: magento.stackexchange.com/a/155238/33057
Khoa TruongDinh

Antworten:

23

object managerVerwenden Sie It like, anstatt direct zu verwenden

use Magento\Framework\App\Filesystem\DirectoryList;

protected $_filesystem;

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

Jetzt können Sie Medienpfad durch,

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

BEARBEITEN

Wenn Sie einen Objekt-Manager verwenden möchten, können Sie diesen verwenden (nicht empfohlen).

$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
quelle
Es wird ein Fehler wie der folgende zurückgegeben: "Uncaught TypeError: Argument 2, das an Namespace \ Module \ Controller \ Index \ Upload :: __ construct () übergeben wird, muss eine Instanz von Magento \ Framework \ Filesystem sein, keine Angabe."
Rita Jose
Ja, versuchen Sie di: kompilieren und versuchen Sie es erneut :)
Keyur Shah
di: compile done, gibt aber wieder einen Fehler zurück :( "Wiederherstellbarer Fehler: Objekt der Klasse Magento \ Framework \ Filesystem \ Directory \ Read konnte in / opt / lampp / htdocs / magento214 / app / code / namespace nicht in einen String konvertiert werden /Customtab/Controller/Index/Upload.php on line 18 "
Rita Jose
Siehe meine Bearbeitung, Wenn Sie direkten Objekt-Manager verwenden möchten
@
wow: D .. Vielen Dank .. Die bearbeitete funktioniert gut :)
Rita Jose
7

Zuerst müssen Sie die DirectoryList-Klasse in Ihren Magento 2-Konstruktor einfügen:

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

Danach haben Sie Zugriff auf DirectoryList-Methoden zum Abrufen verschiedener Pfade. Zum Abrufen eines Medienordners können Sie beispielsweise Folgendes verwenden:

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

Andere mögliche Verwendungen sind:

/* 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
quelle
Es gibt Browser-URL von Medien ... Ich brauche den Ordner Pfad der Medien
Rita Jose
Bitte sehen Sie meine aktualisierte Antwort.
Mohit Kumar Arora
bis nicht funktioniert.
Sarfaraj Sipai
Danke @MohitKumarArora - hat meinen Tag gerettet. Die oben genannte Lösung funktionierte wie Charme
Abid Malik
6

Verwenden Sie den folgenden Code, um den Medienpfad für die .phtml-Datei abzurufen.

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

Mit dem Objectmanager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
echo $objectManager->get('Magento\Store\Model\StoreManagerInterface')
                    ->getStore()
                    ->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
Rajat Kara
quelle
2
Es gibt den URL-Pfad des Browsers zurück. Ich benötige den Ordnerpfad der Medien
Rita Jose
6

Versuchen Sie es mit StoreManagerInterface

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

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

Holen Sie sich jetzt Medien-URL mit

 $mediaUrl = $this->storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
swathi_sri
quelle
funktioniert nicht .....
Sarfaraj Sipai