Como obter o URL base do Magento 2?


56

No Magento 1 Mage::getBaseUrl();, mas no Magento 2 eu tenho que passar o tipo de objeto de classe responsável no construtor.

Eu não tenho a idéia de qual classe eu tenho que passar?

Respostas:


115

No magento 2.

Se você deseja obter o URL base, tente o código abaixo:

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

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

Onde $this->_storeManagerinstância de\Magento\Store\Model\StoreManagerInterface

este código acima lhe dará resultado

http://www.example.com ( se a reescrita de SEO estiver ativada )

E http://www.example.com/index.php ( se a reescrita de SEO não estiver ativada )

Se você deseja URL base sem index.php

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

Veja em detalhes em magento2 get base url and media url and static url

Usando o Gerenciador de Objetos

URL base:

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

URL base sem 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 obter o URL base da mídia:

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

para obter o URL do link:

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

Editar

Para obter o $this->_storeManager Você deve chamar injetar\Magento\Store\Model\StoreManagerInterface $storeManager

na __construct( )função na classe de bloco

Assim como :

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

Atualizada:

Além disso, você pode obter URL base directamente no phtmlmeio de uma chamada direta 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 . Se você deseja url base em phtml, injete StoreManagerInterfaceno bloco


3
Eu desencorajaria o uso do gerenciador de objetos diretamente, como mencionado nesta resposta. Você deve fazer isso injetando o StoreManager na sua classe Block, como também mencionado nesta resposta.
— 7ochem 01/12/19

@ 7ochem, é depende chamada desenvolvedor :)
— Amit Bera

2
É verdade, eu ainda altamente desencorajar os desenvolvedores a fazê-lo
— 7ochem

43

Basta usar este comando com uma classe que se estende \Magento\Framework\View\Element\Template.

$this->getBaseUrl()

Caso contrário, use isto:

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

Ou, se você o estiver usando em um modelo PHTML, use:

$block->getBaseUrl()

Curto e eficiente
— Asish Hira

Bom, obrigado. Você sabe se isso precisa escapar ou não? Magento não parece ter verificado ainda.
— Ben Crook

@ Ben-Space48 Não precisa de scape, como o Magento 1.
— Rafael Corrêa Gomes

11
Esta resposta poderia realmente usar um pouco mais de contexto. Você está assumindo que eles estão dentro de uma classe que se estende \Magento\Framework\View\Element\Template. No entanto, a pergunta do OP não faz referência de onde ele está atualmente codificando. Como modelo, auxiliar, controlador etc.
— Darren Felton

Em um modelo phtml você deve usar $ BLOCO> getBaseURL () em vez de $ this-> getBaseURL ()
— Daniel Kratohvil

14

No Magneto2: Esta é a maneira de obter o link do URL no arquivo PHTML:

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

Espero que funcione para você


6

Se você deseja apenas obter uma URL do diretório raiz da instalação do Magento, basta usar getUrl. Ele é herdado da classe AbstractBlock (Magento \ Framework \ View \ Element \ AbstractBlock) para que você possa usá-lo em qualquer um de seus blocos. Aqui está um exemplo

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

O primeiro parâmetro é o caminho que você deseja e o segundo define a opção _secure se o usuário estiver navegando por https. Você pode adicionar ao caminho concatenando um nome de arquivo específico na chamada getUrl ou pode adicioná-lo ao primeiro parâmetro. O caminho é relativo ao diretório raiz da sua instalação do Magento.


11
por que $ this-> getUrl ('pub / media / catalog / product') isso me fornece o caminho até o diretório do catálogo e ignora o diretório do produto?
— Chirag dodia 23/12/2015

6

injetar gerente de loja e simplesmente obter URL base

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


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

Nota: não crie gerenciador de objetos sempre injetar


3

Bem, se é Magento 2.0.0. A versão estável do CE e qualquer tipo de objeto "Contexto" já está carregado na classe Block, como Magento\Backend\Block\Widget\Contextassim, basta chamar a getStoreManager()->getStore()->getBaseUrl()função como abaixo:

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

dentro do construtor você também pode passar argumentos como \Magento\Framework\UrlInterface::URL_TYPE_MEDIAdentro desta getBaseUrl()função.

Espero que isto ajude.


2

A maneira correta de obter mídia em PHTML é:

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


1

Na sua raiz magento, crie o arquivo 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

No arquivo de classe de bloco, adicione a seguinte função:

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 chame isso do seu arquivo de modelo .phtml com o seguinte:

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

0

Você pode obter o URL do Magento2 Base usando este:

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

0

No magento 2.

Se você deseja obter o URL base, use o código abaixo:

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

Usando objectManager, você pode usar o seguinte código

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

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

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

-2

Aqui está o tutorial detalhado que encontrei para obter o URL base e outros no Magento2. http://www.webmull.com/magento-2-getbase-url/

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

este post descreve como obter url no magento 1.x, na lógica do magento 2 para obter url são diferentes.
— Joni Jones

2
não, também existe uma descrição para o magento 2, mas a resposta anterior de Amit Bera aqui, muito mais detalhada e não apenas um link, deve ser aceita como correta.
— FireBear
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.