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
코아 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();

편집하다

당신이 사용하려는 경우 개체 관리자를 , 당신이 사용할 수 있습니다 (권장하지 않음)

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

다음과 같은 오류를 반환합니다. "Uncaught TypeError : 인수 2 (namespace \ Module \ Controller \ Index \ Upload :: __ construct ()에 전달 된 인수 2는 Magento \ Framework \ Filesystem의 인스턴스 여야합니다."
Rita Jose

예, di : compile을 시도하고 다시 시도하십시오 :)
Keyur Shah

di : compile done, 그러나 errror를 다시 반환합니다. ( "복구 가능한 오류 : Magento \ Framework \ Filesystem \ Directory \ Read 클래스의 개체를 / opt / lampp / htdocs / magento214 / app / code / namespace에서 문자열로 변환 할 수 없습니다. / 18 번 줄의 /Customtab/Controller/Index/Upload.php
Rita Jose

당신이 직접 객체 관리자 @RitaJose 사용하려면, 내 편집을 참조
Keyur 샤

와우 : 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을 반환합니다 ... 미디어의 폴더 경로가 필요합니다
Rita Jose

업데이트 된 답변을 참조하십시오.
Mohit Kumar Arora

작동하지 않을 때까지.
Sarfaraj Sipai 2016 년

@MohitKumarArora 감사합니다-내 하루를 구했습니다. 위의 해결책은 매력처럼 작동했습니다
Abid Malik

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

이제 다음을 사용하여 미디어 URL을 가져옵니다.

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

작동하지 않습니다 .....
Sarfaraj Sipai
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.