Media URL
템플릿 파일 을 얻는 방법 ? 내가 찾은 모든 솔루션은 Object Manager를 직접 호출하는 것입니다. 저의 또 다른 관심사, 모범 사례로 직접 객체 관리자를 호출 할 수 있습니까? (대부분의 솔루션에서 객체 관리자를 사용하고 있기 때문에)
Media URL
템플릿 파일 을 얻는 방법 ? 내가 찾은 모든 솔루션은 Object Manager를 직접 호출하는 것입니다. 저의 또 다른 관심사, 모범 사례로 직접 객체 관리자를 호출 할 수 있습니까? (대부분의 솔루션에서 객체 관리자를 사용하고 있기 때문에)
답변:
아래 방법을 사용하여 템플릿 파일에서 미디어 URL을 얻을 수 있지만 objectmanager를 사용하지 않고 construct 메소드에서 __construct()
define storeManagerInterface 를 사용 하여 메소드로 블록 파일을 정의해야합니다 .
phtml 블록 파일에서 __construct 함수를 작성하십시오.
공공 $ _storeManager;
public function __construct(\Magento\Store\Model\StoreManagerInterface $storeManager)
{
$this->_storeManager = $storeManager;
}
mediaurl을 얻으려면 아래의 phtml 파일 호출에서
$mediaUrl = $this ->_storeManager-> getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA );
에코 $ mediaUrl;
이것은 Magento 2에서 미디어 URL을 얻는 올바른 방법입니다.
\Magento\Framework\View\Element\Template
이미 StoreManagerInterface
( $this->_storeManager
) 의 인스턴스가있는 것 입니다.
2.1 현재로서는 다음 중 하나를 사용하지 않고 미디어 URL을 얻는 직접적인 방법은 없습니다.
Rakesh는 한 가지 방법을 언급했습니다.
또 다른 방법은 https://github.com/magento/magento2/blob/f2d309a88298886460351c04973a4ff95c7a91c0/lib/internal/Magento/Framework/View/Element/AbstractBlock.php에$_urlBuilder
정의 된대로 모든 블록에 포함 된 보호 변수를 사용하는 것입니다 AbstractBlock
. # L186
따라서 블록의 생성자를 수정할 필요가 없으며 간단히 다음 방법을 추가 할 수 있습니다.
public function getMediaUrl() {
return $this->_urlBuilder->getBaseUrl(['_type' => UrlInterface::URL_TYPE_MEDIA]);
}
그런 다음 템플릿에서 다음을 호출 할 수 있습니다.
$block->getMediaUrl();
\ Magento \ Framework \ View \ Element \ Template을 확장하는 데 어려움을 겪고 싶지 않고 .phtml 파일이 \ Magento \ Framework \ View \ Element \ Template 블록을 사용하도록하려면 이 바로 가기 :
$this->helper('Magento\Cms\Helper\Wysiwyg\Images')->getBaseUrl()
Raphael의 답변을 사용하고 확장 할 것입니다.하지만 메소드를 블록 클래스에 추가하는 대신 도우미를 만들고 거기에 추가하지 않겠습니까?
일반적인 방법으로 새 모듈을 만들어 시작하고 루트 내에서 "Helper"라는 새 폴더를 만들고 여기에 필요한 코드를 추가하십시오.
namespace YourSite\YourModule\Helper;
use Magento\Framework\UrlInterface;
class Url extends \Magento\Framework\App\Helper\AbstractHelper
{
public function getMediaPath() {
return $this->_urlBuilder->getBaseUrl(['_type' => UrlInterface::URL_TYPE_MEDIA]);
}
}
활성화 및 컴파일되면 다음 방법을 사용하여 템플릿 파일 내에서 사용할 수 있습니다.
<?php $url = $this->helper('\YourSite\YourModule\Helper\Url'); ?>
<img src="<?php echo $url->getMediaPath() ?>wysiwyg/image.jpg" />
나는 당신 (그리고 잠재적으로 다른 사람들)이 이것을 잘 사용하기를 바랍니다.