Comment obtenir l'URL de base de Magento 2?

58

Dans Magento 1 Mage::getBaseUrl();, mais dans Magento 2, je dois passer le type d'objet de classe responsable dans le constructeur.

Je ne sais pas quelle classe je dois passer?

sivakumar
la source

Réponses:

116

Dans magento 2.

Si vous voulez obtenir l'URL de base, vous pouvez essayer le code ci-dessous:

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

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

$this->_storeManagerexemple de\Magento\Store\Model\StoreManagerInterface

ce code ci-dessus vous donnera le résultat

http://www.example.com ( si la réécriture du référencement est activée )

Et http://www.example.com/index.php ( Si la réécriture du référencement n'est pas activée )

Si vous voulez l'URL de base sans index.php

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

Voir en détail à magento2 get base url and media url and static url

Utilisation du gestionnaire d'objets

URL de base:

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

URL de base sans index.php

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

Pour obtenir l'URL de la base de média:

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

pour obtenir l'URL du lien:

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

Modifier

Pour obtenir le $this->_storeManager Vous devriez appeler injecter\Magento\Store\Model\StoreManagerInterface $storeManager

at __construct( )function at block class

juste comme :

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

Mis à jour:

En outre, vous pouvez obtenir l’ URL de base directement lors de phtmll’appel direct de object Manager.

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

Remarque: Directly call of object manager is not good idea . Si vous voulez l'URL de base au phtml puis injectez StoreManagerInterfaceau bloc

Amit Bera
la source
3
Je découragerais fortement l'utilisation de l'objectmanager directement, comme mentionné dans cette réponse. Pour ce faire, vous devez injecter StoreManager dans votre classe Block, comme indiqué également dans cette réponse.
7ochem
@ 7ochem, cela dépend de l'appel du développeur :)
Amit Bera
2
Certes, je déconseillerais toujours fortement les développeurs de le faire
7ochem
43

Utilisez simplement cette commande avec vous utilisez une classe qui s'étend \Magento\Framework\View\Element\Template.

$this->getBaseUrl()

Sinon, utilisez ceci:

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

Ou si vous l'utilisez dans un modèle PHTML, utilisez:

$block->getBaseUrl()
Rafael Corrêa Gomes
la source
Court et efficace
Asish Hira
Nice, merci. Savez-vous si cela doit s'échapper ou non? Magento ne semble pas l'avoir encore vérifiée.
Ben Crook
@ Ben-Space48 Pas besoin de scape, comme Magento 1.
Rafael Corrêa Gomes
1
Cette réponse pourrait vraiment utiliser un peu plus de contexte. Vous supposez qu'ils font partie d'une classe qui s'étend \Magento\Framework\View\Element\Template. Cependant, la question du PO ne fait aucune référence à l'endroit où il code actuellement. Tels que modèle, assistant, contrôleur, etc.
Darren Felton
Dans un template phtml, vous devriez utiliser $ block-> getBaseUrl () au lieu de $ this-> getBaseUrl ()
Daniel Kratohvil
14

Dans Magneto2: Voici un moyen d'obtenir un lien URL dans un fichier PHTML:

echo $this->getUrl('about-us')

J'espère que ça marchera pour toi

Chandra Prakash Gupta
la source
6

Si vous souhaitez simplement obtenir une URL à partir du répertoire racine de votre installation Magento, vous pouvez simplement utiliser getUrl. Il hérite de la classe AbstractBlock (Magento \ Framework \ View \ Element \ AbstractBlock) afin que vous puissiez l'utiliser avec l'un de vos blocs. Voici un exemple

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

Le premier paramètre est le chemin que vous souhaitez et le second définit l'option _secure si l'utilisateur navigue sur https. Vous pouvez ajouter au chemin en concaténant un nom de fichier spécifique sur l'appel getUrl ou vous pouvez l'ajouter au premier paramètre. Le chemin est relatif au répertoire racine de votre installation Magento.

Nathan Toombs
la source
1
pourquoi $ this-> getUrl ('pub / media / catalogue / product') cela me donne le chemin d'accès au répertoire du catalogue et en ignorant le répertoire du produit?
dodia chirag
6

injecter le gérant du magasin et obtenir simplement l'URL de base

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


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

Remarque: ne créez pas toujours le gestionnaire d'objets.

Surendra Kumar Ahir
la source
3

Bien si c'est Magento 2.0.0. La version CE Stable et n'importe quel type d'objet "Context" est déjà chargé dans la classe Block comme Magento\Backend\Block\Widget\Contextil suffit d'appeler la getStoreManager()->getStore()->getBaseUrl()fonction comme ci-dessous:

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

à l'intérieur du constructeur, vous pouvez également passer des arguments comme \Magento\Framework\UrlInterface::URL_TYPE_MEDIAdans cette getBaseUrl()fonction.

J'espère que cela t'aides.

Vicky Dev
la source
2

La manière correcte d’obtenir un média en PHTML est:

$block->getViewFileUrl('images/myimage.png');
Arvind07
la source
2

Simplement: <?php $block->getBaseUrl() ?>

PЯINCƏ
la source
1

Créez le fichier Test.php dans votre racine magento.

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();
Jitendra Mohanta
la source
1

Dans votre fichier de classe de bloc, ajoutez la fonction suivante:

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 '#';
        }
    }

Et appelez ceci à partir de votre fichier de modèle .phtml avec:

$block->getImageUrl('<relative image path>')
Nahid
la source
0

Vous pouvez obtenir l'URL de base Magento2 en utilisant ceci:

$this->_storeManager->getStore()->getBaseUrl()
Pratik Kamani
la source
0

Dans magento 2.

Si vous voulez obtenir l'URL de base, vous pouvez utiliser le code ci-dessous:

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

En utilisant objectManager, vous pouvez utiliser le code suivant

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

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

$storeManager->getStore()->getBaseUrl();
simya sreejith
la source
-2

Voici le tutoriel détaillé que j'ai trouvé pour obtenir l'URL de base et d'autres dans Magento2. http://www.webmull.com/magento-2-getbase-url/

public function getBaseUrl()
{
    return $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
}
Gaurav Jain
la source
Cet article décrit comment obtenir une URL dans magento 1.x, dans la logique de magento 2 pour obtenir une URL différente.
joni jones
2
non, il y a une description de magento 2 également, mais la réponse précédente de Amit Bera ici, beaucoup plus détaillée et pas seulement un lien, devrait être acceptée comme étant correcte.
FireBear