在 Magento 2.0 中获取当前页面 url

Posted

技术标签:

【中文标题】在 Magento 2.0 中获取当前页面 url【英文标题】:Get the current page url in Magento 2.0 【发布时间】:2016-03-01 12:43:33 【问题描述】:

我正在尝试在模板文件中检索当前页面 url,但我不知道如何在 Magento 2.0 中进行。

有人知道怎么获得吗? (请记住,我正在使用模板/phtml 文件)

【问题讨论】:

【参考方案1】:

universal solution:可在任何地方工作,而不仅仅是来自模板:

/** @var \Magento\Framework\UrlInterface $urlInterface */
$urlInterface = \Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Framework\UrlInterface');
$urlInterface->getCurrentUrl();

您可以从模板do it simplier: 使用\Magento\Framework\View\Element\AbstractBlock::getUrl() 方法:

$block->getUrl();

核心示例:https://github.com/magento/magento2/blob/2.0.0/app/code/Magento/Customer/view/frontend/templates/logout.phtml#L14

【讨论】:

你应该注入一个工厂,而不是直接使用对象管理器。 $block->getUrl();返回主页 URL,而不是当前页面 URL @CarComp,我同意你的观点,应该首选工厂。但是单独使用Magento\Framework\UrlInterface 并没有错。当你需要一个单例时应该使用它。但是,如果您需要创建多个新 URL,则使用 Magento\Framework\UrlFactory 更有意义。 得到了这个搜索结果,2021 年几乎所有的教程/指南都建议不要将ObjectManager 直接用于任何类型的实现。下面使用UrlInterface 的答案显示了获取网址的多种方法。【参考方案2】:

不要直接在文件中使用对象管理器实例

使用 objectManager

$urlInterface = \Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Framework\UrlInterface');
$urlInterface->getCurrentUrl();

使用工厂方法

protected $_urlInterface;

public function __construct(
    ...
    \Magento\Framework\UrlInterface $urlInterface
    ...
) 
    $this->_urlInterface = $urlInterface;


public function getUrlInterfaceData()

    echo $this->_urlInterface->getCurrentUrl();

    echo $this->_urlInterface->getUrl();

    echo $this->_urlInterface->getUrl('test/test2');

    echo $this->_urlInterface->getBaseUrl();

【讨论】:

上面的工厂方法是最好的实践方法,而且绝对有效。接受的答案不是正确的方法。这应该是公认的答案。谢谢!【参考方案3】:

如果没有 Object Manager,您可以使用以下行在 templates 文件中获取 current URL

$this->getUrl('*/*/*', ['_current' => true, '_use_rewrite' => true])

【讨论】:

以上是关于在 Magento 2.0 中获取当前页面 url的主要内容,如果未能解决你的问题,请参考以下文章

php Magento 2:从phtml上的块获取当前URL

Magento:获取当前CMS页面ID

PHP Magento:获取当前的CMS页面ID

Magento 2在结帐页面phtml中发送到支付网关之前获取订单ID?

如何使用 php-url 路径在 Magento CMS 页面中加载图像背景?

Magento 中付款方式的名称