在Magento2开发过程中经常会用到Base Url,Media Url,Static Url,下面就讲下在Magento2的不同文件中调用Base Url,Media Url,Static Url
在phtml文件中获取Base Url,Media Url,Static Url
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$storeManager = $objectManager->get('\Magento\Store\Model\StoreManagerInterface');
/* Get base url with index When index.php enable at Url */
$baseUrl = $storeManager->getStore()->getBaseUrl();
/* Result http://www.example.com/ or http://www.example.com/index.php depends SEo rewite settng*/
/* it always give the URL without Index.php either index.php enable for Url */
$baseUrlWithOutIndexPhp = $storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB);
// $baseUrl result = http://example.com/
/* It is give url with index.php whenever seo rewrite not enable mean when Index.php show at Url */
$linkUrl= $storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK);
/* $linkUrl result = http://example.com/index.php/
whenever seo rewrite not enable mean when Index.php show at Url
but when SEO Rewrite enabled
Then it show result = http://example.com/
*/
$statiContenteUrl =$storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_STATIC);
/* Result $statiContenteUrl = http://example.com/pub/static/version1507042743/
In this part version1507042743 is 1507042743 static content version which dynamcically created
*/
$mediaUrl = $storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
/* Result $mediaUrl = http://example.com/pub/media/
*/
直接使用对象管理器不是一个好主意
如果在您的Block/helper/controller/Model中有Store Manager Object类,你就可以用下面的代码获取Base Url,Media Url,Static Url,注意,你讲通过Magento\Store\Model\StoreManagerInterface注入类获取商店管理器对象
获取Base Url
/* it always give the URL Index.php either index.php enable for Url */ /* result is http://example.com/ or http://example.com/index.php depends Magento Setting SEO Rewrite */ $this->_storeManager->getStore()->getBaseUrl()
你将得到如下结果
http://www.example.com (如果Seo rewrite 开启) 和 http://www.example.com/index.php (如果Seo rewrite 未开启)
如果你想获取的Base Url不带index.php,用下面的代码
$this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB)
获取Media Url
$this->_storeManager->getStore()->getBaseUrl()
获取链接 Url
/* $linkUrl result = http://example.com/index.php/ whenever seo rewrite not enable mean when Index.php show at Url
but when SEO Rewrite enabled Then it show result = http://example.com/
*/
$this->_storeManager->getStore()
->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK);
获取Static Url
/* Result $statiContenteUrl = http://example.com/pub/static/version1507042743/ In this part version1507042743 is 1507042743 static content version which dynamcically created $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_STATIC);
在Magento1中你可以用Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB))来获取Base Url,Magento1获取Base Url , Skin Url , Media Url , Js Url , Store Url 和 Current Url链接
在Magento2中,没有使用工厂模式,所以没有像Mage :: getBaseUrl()的代码,你可以使用StoreManager object,然后用$this->_storeManager->getStore()->getBaseUrl()你就可以获得Base Url了。
Magento2中,使用接口、注入类,你应该注入
Magento\Store\Model\StoreManagerInterface
在Model,Resource model,Helper类中获取Base URL。
在下面的示例类中,我已经为我的类注入了StoreManagerInterface
<?php
namespace {MyClassNameSpace};
class {ClassName}
{
/**
* @var \Magento\Store\Model\StoreManagerInterface
*/
protected $_storeManager;
public function __construct(
......
\Magento\Store\Model\StoreManagerInterface $storeManager
.......
) {
.....
$this->_storeManager = $storeManager;
.....
}
public function mygStoreBaseUrl(){
$statiContenteUrl = $this->_storeManager->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_STATIC);
$mediaUrl = $this->_storeManager->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
$linkUrl = $this->_storeManager->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK);
$baseUrlwithoutIndexPhp = $this->_storeManager->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB);
return $this->_storeManager->getStore()
->getBaseUrl();
}
public function myStoreUrl(){
return $this->_storeManager->getStore()->getBaseUrl()
}
}
请注意:如果您使用了任何块类扩展基本块模板
\Magento\Framework\View\Element\Template
应该避免为该情况注入商店管理器接口,因为extends类已经有商店管理器对象
\Magento\Store\Model\StoreManagerInterface
尝试下面的代码来获取magento2 BaseURL
$this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB)
如何通过对象管理器获取magento2 Base URL 使用对象管理器获取magento2 Base URL然后尝试下面:
$this->_objectManager->get('Magento\Store\Model\StoreManagerInterface')
->getStore($storeId)
->getBaseUrl();
假设您的类具有对象管理器。
如果没有对象管理器,那么试试这个:
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$storeManager = $objectManager->get('\Magento\Store\Model\StoreManagerInterface');
$storeManager->getStore()->getBaseUrl();
但是这种类型的对象管理器调用真的很糟糕。

