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?

sivakumar
fonte

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

Amit Bera
fonte
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()
Rafael Corrêa Gomes
fonte
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ê

Chandra Prakash Gupta
fonte
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.

Nathan Toombs
fonte
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

Surendra Kumar Ahir
fonte
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.

Vicky Dev
fonte
2

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

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

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

PЯINCƏ
fonte
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();
Jitendra Mohanta
fonte
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>')
Nahid
fonte
0

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

$this->_storeManager->getStore()->getBaseUrl()
Pratik Kamani
fonte
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();
simya sreejith
fonte
-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);
}
Gaurav Jain
fonte
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