如何获取Media URL
模板文件?我找到的所有解决方案都是直接调用对象管理器。我的另一个担心是,您能否作为最佳实践直接致电对象管理器?(因为在大多数解决方案中,他们正在使用对象管理器)
如何获取Media URL
模板文件?我找到的所有解决方案都是直接调用对象管理器。我的另一个担心是,您能否作为最佳实践直接致电对象管理器?(因为在大多数解决方案中,他们正在使用对象管理器)
Answers:
您可以通过以下方法在模板文件中获取媒体URL,但无需使用objectmanager,您必须使用在construct方法中__construct()
使用define storeManagerInterface的方法来定义Block文件。
在您的phtml阻止文件中创建__construct函数。
公共$ _storeManager;
public function __construct(\Magento\Store\Model\StoreManagerInterface $storeManager)
{
$this->_storeManager = $storeManager;
}
在以下方法的phtml文件调用中获取mediaurl,
$mediaUrl = $this ->_storeManager-> getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA );
echo $ mediaUrl;
这是在Magento 2中获取媒体URL的正确方法。
\Magento\Framework\View\Element\Template
,则您已经有StoreManagerInterface
($this->_storeManager
)的实例。
从2.1版本开始,没有任何一种获取媒体URL的直接方法:
Rakesh提到了一种方法。
另一种方法是使用受保护的变量$_urlBuilder
被包括为每一个块中的定义,AbstractBlock
:https://github.com/magento/magento2/blob/f2d309a88298886460351c04973a4ff95c7a91c0/lib/internal/Magento/Framework/View/Element/AbstractBlock.php #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的答案并将其扩展-但是为什么不将方法添加到block类中,为什么不创建一个帮助器并将其添加到其中呢?
首先以通常的方式创建一个新模块,然后在根目录中创建一个名为“ 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" />
希望您(还有可能其他人)发现它很有用!