web-dev-qa-db-fra.com

Obtenir l'URL de la page actuelle dans Magento 2.0

J'essaie de récupérer l'URL de la page actuelle dans un fichier de modèle, mais je ne sais pas comment le faire dans Magento 2.0.

Est-ce que quelqu'un sait comment l'obtenir? (gardez à l'esprit que je travaille dans un fichier modèle/phtml)

16
Seregmir

solution universelle : fonctionne de n'importe où, pas seulement à partir d'un modèle:

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

A partir d'un modèle, vous pouvez faire plus simple : en utilisant la méthode \Magento\Framework\View\Element\AbstractBlock::getUrl() :

$block->getUrl();

Un exemple du noyau: https://github.com/magento/magento2/blob/2.0.0/app/code/Magento/Customer/view/frontend/templates/logout.phtml#L14

29
Mage2.PRO

N'utilisez pas l'instance du gestionnaire d'objets directement dans les fichiers

Avec objectManager

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

avec la méthode d'usine

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();
}
7
Prince Patel

Sans Object Manager, vous pouvez utiliser la ligne ci-dessous pour obtenir currentURL sur le fichier templates

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