如何获得Magento 2基本URL?


56

在Magento 1中Mage::getBaseUrl();,但在Magento 2中,我必须在构造函数中传递负责任的类对象类型。

我不知道我必须通过哪个班级?

Answers:


114

在magento 2。

如果要获取基本url,则可以尝试以下代码:

/**
* @var \Magento\Store\Model\StoreManagerInterface $this->_storeManager
*/

$this->_storeManager->getStore()->getBaseUrl();

$this->_storeManager实例\Magento\Store\Model\StoreManagerInterface

上面的代码将为您提供结果

http://www.example.com如果启用了Seo重写

http://www.example.com/index.php如果未启用Seo重写

如果您希望基本网址不包含 index.php

$this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB)

详见 magento2 get base url and media url and static url

使用对象管理器

基本网址:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$storeManager = $objectManager->get('\Magento\Store\Model\StoreManagerInterface');
$storeManager->getStore()->getBaseUrl();

没有index.php的基本网址

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$storeManager = $objectManager->get('\Magento\Store\Model\StoreManagerInterface');
$storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB);

要获取媒体基本网址:

$this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);

获取链接网址:

$this->_storeManager->getStore()
           ->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK);

编辑

为了获得 $this->_storeManager 您应该致电注射\Magento\Store\Model\StoreManagerInterface $storeManager

__construct( )功能上在块类

就像 :

public $_storeManager;
  public function __construct(
      \Magento\Store\Model\StoreManagerInterface $storeManager,
       .....
    ) {
       ...
  $this->_storeManager=$storeManager;
    }

更新:

此外,您还可以得到基本的URL 直接phtml使用的直接调用object Manager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$storeManager = $objectManager->get('\Magento\Store\Model\StoreManagerInterface');
$storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB);

注: Directly call of object manager is not good idea。如果您想要在phtml的基本网址,则StoreManagerInterface在块插入


3
我会极力劝阻直接使用objectmanager,就像在此答案中提到的那样。您应该通过将StoreManager注入到Block类中来执行此操作,就像在此答案中也提到的那样。
7ochem '16

@ 7ochem,这取决于开发人员的电话:)
Amit Bera

2
没错,我仍然会极力劝阻开发人员这样做
7ochem

43

只需使用此命令即可使用扩展类\Magento\Framework\View\Element\Template

$this->getBaseUrl()

如果没有,请使用以下命令:

$this->_storeManager->getStore()->getBaseUrl()

或者,如果您在PHTML模板中使用它,请使用:

$block->getBaseUrl()

简短而高效
Asish Hira

很好,谢谢。你知道这是否需要转义吗?Magento似乎尚未验证。
本·克鲁克

@奔Space48不需要花葶,如Magento的1
拉斐尔·科雷亚·戈麦斯

1
这个答案实际上可以使用更多上下文。您假设它们在可扩展的类中\Magento\Framework\View\Element\Template。但是,OP的问题并未提及他当前从何处进行编码。例如模型,助手,控制器等
Darren Felton

在phtml模板中,您应该使用$ block-> getBaseUrl()而不是$ this-> getBaseUrl()
Daniel Kratohvil,


6

如果您只想从Magento安装的根目录中获取URL,则可以使用getUrl。它继承自AbstractBlock类(Magento \ Framework \ View \ Element \ AbstractBlock),因此您可以在任何块中使用它。这是一个例子

$this->getUrl('pub/media/video/', ['_secure' => $this->getRequest()->isSecure()]).$fileName

第一个参数是所需的路径,如果用户正在浏览https,则第二个参数设置_secure选项。您可以通过将特定的文件名串联到getUrl调用上来添加到路径,也可以将其添加到第一个参数。该路径相对于您的Magento安装的根目录。


1
为什么$ this-> getUrl('pub / media / catalog / product')这给我路径到目录目录并忽略产品目录?
chirag dodia 2015年

6

注入商店经理,只需获取基本URL

public $_storeManager;
  public function __construct(
      \Magento\Store\Model\StoreManagerInterface $storeManager,
       .....
    ) {
       ...
  $this->_storeManager=$storeManager;
    }


$this->_storeManager->getStore()->getBaseUrl();

注意:不要创建总是插入对象管理器


3

好吧,如果是Magento 2.0.0。CE稳定版本和任何“上下文”类型的对象都已经在Block类中加载,Magento\Backend\Block\Widget\Context然后getStoreManager()->getStore()->getBaseUrl()像下面那样调用函数:

$context->getStoreManager()->getStore()->getBaseUrl()

在构造函数内部,您也可以像\Magento\Framework\UrlInterface::URL_TYPE_MEDIA在此getBaseUrl()函数内部那样传递参数。

希望这可以帮助。


2

在PHTML中获取媒体的正确方法是:

$block->getViewFileUrl('images/myimage.png');


1

在您的magento根目录中,创建Test.php文件。

use Magento\Framework\App\Bootstrap;
include('app/bootstrap.php');
$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$storeManager = $objectManager->get('Magento\Store\Model\StoreManagerInterface'); 
$baseUrl= $storeManager->getStore()->getBaseUrl();

1

在您的块类文件中添加以下功能:

public function getImageUrl($link_url = '')
    {
        if(!empty($link_url))
        {
            $media_url = $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);

            return $media_url.'/'.$link_url;
        }
        else
        {
            return '#';
        }
    }

然后从您的.phtml模板文件中调用以下命令:

$block->getImageUrl('<relative image path>')


0

在magento 2。

如果要获取基本url,则可以使用以下代码:

$this->_storeManager->getStore()->getBaseUrl()

通过使用objectManager,可以使用以下代码

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

$storeManager = $objectManager>get('\Magento\Store\Model\StoreManagerInterface');

$storeManager->getStore()->getBaseUrl();

-2

这是我发现的详细教程,可以在Magento2中获得基本URL和其他URL。 http://www.webmull.com/magento-2-getbase-url/

public function getBaseUrl()
{
    return $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
}

这篇文章介绍了如何在magento 1.x中获取url,在magento 2逻辑中获取url有所不同。
joni jones

2
不,也有对magento 2的描述,但是Amit Bera先前的回答在此更为详细,而不仅仅是链接,应该被认为是正确的。
FireBear 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.