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.