¿Cómo obtener la URL base de Magento 2?


58

En Magento 1 Mage::getBaseUrl();, pero en Magento 2 tengo que pasar el tipo de objeto de clase responsable en el constructor.

No tengo idea de qué clase tengo que pasar?

Respuestas:


116

En magento 2.

Si desea obtener la URL base, puede probar el siguiente código:

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

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

Donde $this->_storeManagerinstancia de\Magento\Store\Model\StoreManagerInterface

este código anterior te dará resultado

http://www.example.com ( si la reescritura de Seo está habilitada )

Y http://www.example.com/index.php ( si la reescritura de Seo no está habilitada )

Si desea URL base sin index.php

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

Ver en detalles en magento2 get base url and media url and static url

Usando Object Manager

URL base:

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

URL base sin index.php

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

Para obtener la URL de la base de medios:

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

para obtener enlace url:

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

Editar

Para obtener el $this->_storeManager debe llamar inyectar\Magento\Store\Model\StoreManagerInterface $storeManager

en __construct( )función en la clase de bloque

al igual que :

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

Actualizado:

Además, puede obtener la URL base directamente al phtmlusar la llamada directa 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);

Nota: Directly call of object manager is not good idea . Si desea una base url en phtml, luego inyecte StoreManagerInterfaceen el bloque


3
Yo desalentaría el uso del administrador de objetos directamente, como se menciona en esta respuesta. Debe hacer esto inyectando el StoreManager en su clase Block, como también se menciona en esta respuesta.
7ochem

@ 7ochem, depende de la llamada del desarrollador :)
Amit Bera

2
Es cierto que todavía me altamente desalentar a los desarrolladores para hacerlo
7ochem

43

Simplemente use este comando si está usando una clase que se extiende \Magento\Framework\View\Element\Template.

$this->getBaseUrl()

Si no, use esto:

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

O si lo está utilizando en una plantilla PHTML, use:

$block->getBaseUrl()

Corto y eficiente
Asish Hira

Bien, gracias. ¿Sabes si esto necesita escapar o no? Magento no parece haberlo verificado todavía.
Ben Crook

@ Ben-Space48 No necesita escapar, como Magento 1.
Rafael Corrêa Gomes

1
Esta respuesta realmente podría usar algo más de contexto. Estás asumiendo que están dentro de una clase que se extiende \Magento\Framework\View\Element\Template. Sin embargo, la pregunta del OP no hace referencia a dónde está codificando actualmente. Como Modelo, Ayudante, Controlador, etc.
Darren Felton

En una plantilla phtml, debe usar $ block-> getBaseUrl () en lugar de $ this-> getBaseUrl ()
Daniel Kratohvil

14

En Magneto2: esta es la forma de obtener el enlace Url en el archivo PHTML:

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

Espero que funcione para ti


6

Si solo desea obtener una URL del directorio raíz de su instalación de Magento, puede usar getUrl. Hereda de la clase AbstractBlock (Magento \ Framework \ View \ Element \ AbstractBlock) para que pueda usarlo en cualquiera de sus bloques. Aquí hay un ejemplo

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

El primer parámetro es la ruta que desea, y el segundo establece la opción _secure si el usuario navega por https. Puede agregar a la ruta concatenando un nombre de archivo específico en la llamada getUrl o puede agregarlo al primer parámetro. La ruta es relativa al directorio raíz de su instalación de Magento.


1
¿Por qué $ this-> getUrl ('pub / media / catalog / product') me da la ruta al directorio del catálogo e ignora el directorio del producto?
chirag dodia

6

inyecte el administrador de la tienda y simplemente obtenga la URL base

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


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

Nota: no cree que el administrador de objetos siempre inyecte


3

Bueno, si es Magento 2.0.0. La versión estable de CE y cualquier tipo de objeto "Contexto" ya está cargado en la clase Bloque como Magento\Backend\Block\Widget\Contextentonces simplemente llame a la getStoreManager()->getStore()->getBaseUrl()función como se muestra a continuación:

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

dentro del constructor también puedes pasar argumentos como \Magento\Framework\UrlInterface::URL_TYPE_MEDIAdentro de esta getBaseUrl()función.

Espero que esto ayude.


2

La forma correcta de obtener medios en PHTML es:

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


1

En su raíz de magento cree el archivo 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

En su archivo de clase de bloque, agregue la siguiente función:

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

Y llame a esto desde su archivo de plantilla .phtml con lo siguiente:

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

0

Puede obtener la URL base de Magento2 utilizando esto:

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

0

En magento 2.

Si desea obtener la URL base, puede usar el siguiente código:

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

Al usar objectManager, puede usar el siguiente código

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

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

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

-2

Aquí está el tutorial detallado que encontré para obtener la url base y otras en Magento2. http://www.webmull.com/magento-2-getbase-url/

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

Esta publicación describe cómo obtener la URL en Magento 1.x, en la lógica de Magento 2 para obtener la URL son diferentes.
joni jones

2
no, también hay una descripción para magento 2, pero la respuesta anterior de Amit Bera aquí, mucho más detallada y no solo un enlace, debe aceptarse como correcta.
FireBear
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.