【发布时间】:2016-03-01 12:43:33
【问题描述】:
我正在尝试在模板文件中检索当前页面 url,但我不知道如何在 Magento 2.0 中进行。
有人知道怎么获得吗? (请记住,我正在使用模板/phtml 文件)
【问题讨论】:
我正在尝试在模板文件中检索当前页面 url,但我不知道如何在 Magento 2.0 中进行。
有人知道怎么获得吗? (请记住,我正在使用模板/phtml 文件)
【问题讨论】:
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();
【讨论】:
Magento\Framework\UrlInterface 并没有错。当你需要一个单例时应该使用它。但是,如果您需要创建多个新 URL,则使用 Magento\Framework\UrlFactory 更有意义。
ObjectManager 直接用于任何类型的实现。下面使用UrlInterface 的答案显示了获取网址的多种方法。
不要直接在文件中使用对象管理器实例
使用 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();
}
【讨论】:
如果没有 Object Manager,您可以使用以下行在 templates 文件中获取 current URL
$this->getUrl('*/*/*', ['_current' => true, '_use_rewrite' => true])
【讨论】: