Come ottenere l'URL di base di Magento 2?


58

In Magento 1 Mage::getBaseUrl();, ma in Magento 2 devo passare il tipo di oggetto classe responsabile nel costruttore.

Non ho idea di quale classe devo passare?

Risposte:


116

Nel magento 2.

Se vuoi ottenere l'URL di base, puoi provare sotto il codice:

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

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

Dove $this->_storeManageresempio di\Magento\Store\Model\StoreManagerInterface

questo codice sopra ti darà risultati

http://www.example.com ( se Seo rewrite è abilitato )

E http://www.example.com/index.php ( se Seo rewrite non è abilitato )

Se vuoi l'URL di base senza index.php

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

Vedi in dettaglio a magento2 get base url and media url and static url

Utilizzando Object Manager

URL di base:

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

URL di base senza index.php

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

Per ottenere l'URL della base multimediale:

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

per ottenere l'URL del link:

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

modificare

Per ottenere il $this->_storeManager Dovresti chiamare iniettare\Magento\Store\Model\StoreManagerInterface $storeManager

alla __construct( )funzione alla classe di blocco

proprio come :

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

aggiornato:

Inoltre, è possibile ottenere URL di base direttamente al phtmlutilizzando chiamata diretta di object Manager.

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

Nota: Directly call of object manager is not good idea . Se si desidera l'URL di base su phtml, iniettare StoreManagerInterfaceal blocco


3
Scoraggerei fortemente l'uso diretto del gestore degli oggetti, come menzionato in questa risposta. Dovresti farlo iniettando StoreManager nella tua classe Block, come anche menzionato in questa risposta.
7

@ 7ochem, dipende dalla chiamata dello sviluppatore :)
Amit Bera

2
È vero, scoraggerei ancora fortemente gli sviluppatori a farlo
ottobre

43

Basta usare questo comando con te usando una classe che si estende \Magento\Framework\View\Element\Template.

$this->getBaseUrl()

In caso contrario, utilizzare questo:

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

O se lo stai usando in un template PHTML usa:

$block->getBaseUrl()

Breve ed efficiente
Asish Hira,

Bene, grazie. Sai se questo deve scappare o no? Magento non sembra averlo ancora verificato.
Ben Crook,

@ Ben-Space48 Non è necessario lo scape, come Magento 1.
Rafael Corrêa Gomes,

1
Questa risposta potrebbe davvero utilizzare un po 'più di contesto. Stai assumendo che siano all'interno di una classe che si estende \Magento\Framework\View\Element\Template. Tuttavia, la domanda del PO non fa riferimento a dove sta attualmente codificando. Come modello, assistente, controller, ecc.
Darren Felton,

In un modello phtml dovresti usare $ block-> getBaseUrl () invece di $ this-> getBaseUrl ()
Daniel Kratohvil,

14

In Magneto2: questo è il modo per ottenere il collegamento Url nel file PHTML:

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

Spero che funzionerà per te


6

Se vuoi solo ottenere un URL dalla directory principale della tua installazione di Magento, puoi semplicemente usare getUrl. Eredita dalla classe AbstractBlock (Magento \ Framework \ View \ Element \ AbstractBlock) in modo da poterlo utilizzare su uno qualsiasi dei tuoi blocchi. Ecco un esempio

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

Il primo parametro è il percorso desiderato e il secondo imposta l'opzione _secure se l'utente naviga su https. È possibile aggiungere al percorso concatenando un nome file specifico sulla chiamata getUrl oppure è possibile aggiungerlo al primo parametro. Il percorso è relativo alla directory principale dell'installazione di Magento.


1
perché $ this-> getUrl ('pub / media / catalog / product') questo mi dà il percorso fino alla directory del catalogo e ignorando la directory del prodotto?
Chirag Dodia,

6

iniettare il gestore del negozio e ottenere semplicemente l'URL di base

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


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

Nota: non creare il gestore oggetti iniettare sempre


3

Bene, se è Magento 2.0.0. La versione CE stabile e qualsiasi tipo di oggetto "Contesto" è già caricato nella classe Block come Magento\Backend\Block\Widget\Contextquindi basta chiamare la getStoreManager()->getStore()->getBaseUrl()funzione come di seguito:

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

all'interno del costruttore puoi anche passare argomenti come \Magento\Framework\UrlInterface::URL_TYPE_MEDIAall'interno di questa getBaseUrl()funzione.

Spero che sia di aiuto.


2

Il modo corretto per ottenere media in PHTML è:

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


1

Nella tua radice magento crea il file 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

Nel file della classe di blocco aggiungi la seguente funzione:

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

E chiama questo dal tuo file modello .phtml con il seguente:

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

0

Puoi ottenere l'URL di Magento2 Base usando questo:

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

0

Nel magento 2.

Se desideri ottenere l'URL di base, puoi utilizzare il codice seguente:

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

Utilizzando objectManager, è possibile utilizzare il seguente codice

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

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

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

-2

Ecco il tutorial dettagliato che ho trovato per ottenere l'URL di base e altri in Magento2. http://www.webmull.com/magento-2-getbase-url/

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

questo post descrive come ottenere l'URL in magento 1.x, nella logica di magento 2 per ottenere l'URL sono diversi.
joni jones,

2
no, c'è anche una descrizione per magento 2, ma la precedente risposta di Amit Bera qui molto più dettagliata e non solo un link, dovrebbe essere accettata come corretta.
FireBear,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.