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
खोआ ट्रूंगडिन्ह

जवाबों:


25

डायरेक्ट यूज़ करने के बजाय इसे लाइक का इस्तेमाल 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();

संपादित करें

यदि आप ऑब्जेक्ट मैनेजर का उपयोग करना चाहते हैं , तो आप इसका उपयोग कर सकते हैं (अनुशंसित नहीं)

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

यह इस तरह एक त्रुटि देता है "अनकैप्ड टाइपर्रर: तर्क 2 नामस्थान \ मॉड्यूल \ नियंत्रक \ सूचकांक \ अपलोड करने के लिए पारित किया गया :: __ निर्माण () मैगेंटो \ फ्रेमवर्क \ फाइलसिस्टम का एक उदाहरण होना चाहिए, कोई नहीं दिया गया,"
रीता जोस

हाँ, di करने का प्रयास करें: संकलन करें और पुन: प्रयास करें :)
कीयूर शाह

di: किया गया संकलन, लेकिन यह फिर से एक गलत रिटर्न देता है :( "पुनर्प्राप्त करने योग्य त्रुटि: वर्ग Magento \ फ्रेमवर्क \ Filesystem \ Directory \ Read की वस्तु को स्ट्रिंग में / ऑप्ट / लैम्प / htdocs / magento21414 / app / code / namespace में परिवर्तित नहीं किया जा सकता है /Customtab/Controller/Index/Upload.php ऑन लाइन 18 "
रीता जोस

मेरा संपादन देखें, यदि आप डायरेक्ट ऑब्जेक्ट मैनेजर @ रीटाजोस
शाह

वाह: D .. बहुत बहुत धन्यवाद .. संपादित एक ठीक काम करता है :)
रीता जोस

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 को लौटाता है ... मुझे मीडिया के फ़ोल्डर पथ की आवश्यकता है
रीता जोस

कृपया मेरा अद्यतन उत्तर देखें।
मोहित कुमार अरोड़ा

काम नहीं करने तक।
सरफराज सिपाई

धन्यवाद @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);

3
यह ब्राउज़र url पथ देता है .. मुझे मीडिया का फ़ोल्डर पथ चाहिए
Rita Jose

6

StoreManagerInterface का उपयोग करके इसे प्राप्त करने का प्रयास करें

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

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

अब मीडिया यूआरएल का उपयोग करें

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

काम नहीं कर रहा .....
सरफराज सिपाई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.