Jak uzyskać podstawowy adres URL Magento 2?

56

W Magento 1 Mage::getBaseUrl();, ale w Magento 2 muszę przekazać konstruktorowi typ obiektu klasy odpowiedzialnej.

Nie mam pojęcia, którą klasę muszę zaliczyć?

sivakumar
źródło

Odpowiedzi:

114

W magento 2.

Jeśli chcesz uzyskać podstawowy adres URL, możesz wypróbować poniższy kod:

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

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

Gdzie $this->_storeManagerwystąpił\Magento\Store\Model\StoreManagerInterface

powyższy kod da wynik

http://www.example.com ( jeśli przepisywanie Seo jest włączone )

I http://www.example.com/index.php ( Jeśli przepisywanie Seo nie jest włączone )

Jeśli chcesz podstawowy adres URL bez index.php

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

Zobacz szczegóły na magento2 get base url and media url and static url

Korzystanie z Menedżera obiektów

Podstawowy adres URL:

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

Podstawowy adres URL bez index.php

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

Aby uzyskać adres URL bazy medialnej:

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

w celu uzyskania adresu URL linku:

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

Edytować

Aby uzyskać $this->_storeManager powinieneś wezwać zastrzyk\Magento\Store\Model\StoreManagerInterface $storeManager

w __construct( )funkcji w klasie blokowej

tak jak :

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

Zaktualizowano:

Możesz również uzyskać adres URL bezpośrednio przy phtmlużyciu bezpośredniego połączenia object Manager.

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

Uwaga: Directly call of object manager is not good idea . Jeśli chcesz bazowy adres URL w phtml, to wstrzyknij StoreManagerInterfacew bloku

Amit Bera
źródło
3
Bardzo odradzałbym korzystanie z menedżera obiektów bezpośrednio, jak wspomniano w tej odpowiedzi. Powinieneś to zrobić, wstrzykując StoreManager do swojej klasy Block, jak również wspomniano w tej odpowiedzi.
7ochem
@ 7ochem, to zależy od połączenia programisty :)
Amit Bera
2
To prawda, że ​​nadal bardzo odradzam programistom
7ochem
43

Po prostu użyj tego polecenia, gdy używasz rozszerzonej klasy \Magento\Framework\View\Element\Template.

$this->getBaseUrl()

Jeśli nie, użyj tego:

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

Lub jeśli używasz go w szablonie PHTML użyj:

$block->getBaseUrl()
Rafael Corrêa Gomes
źródło
Krótki i skuteczny
Asish Hira 20.04.16
Miło, dziękuję. Czy wiesz, czy to wymaga ucieczki, czy nie? Wygląda na to, że Magento jeszcze tego nie zweryfikował.
Ben Crook
@ Ben-Space48 Nie potrzebuję scape, takich jak Magento 1.
Rafael Corrêa Gomes,
1
Ta odpowiedź przydałaby się w kontekście. Zakładasz, że należą one do klasy, która się rozszerza \Magento\Framework\View\Element\Template. Jednak pytanie PO nie odnosi się do tego, skąd obecnie koduje. Takich jak Model, Pomocnik, Kontroler itp.
Darren Felton
W szablonie phtml powinieneś użyć $ block-> getBaseUrl () zamiast $ this-> getBaseUrl ()
Daniel Kratohvil
14

W Magneto2: W ten sposób można uzyskać link Url do pliku PHTML:

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

Mam nadzieję, że ci się uda

Chandra Prakash Gupta
źródło
6

Jeśli chcesz uzyskać adres URL z katalogu głównego instalacji Magento, możesz po prostu użyć getUrl. Dziedziczy po klasie AbstractBlock (Magento \ Framework \ View \ Element \ AbstractBlock), dzięki czemu możesz używać go w dowolnym bloku. Oto przykład

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

Pierwszy parametr to żądana ścieżka, a drugi ustawia opcję _secure, jeśli użytkownik przegląda https. Możesz dodać do ścieżki, łącząc określoną nazwę pliku z wywołaniem getUrl lub możesz dodać ją do pierwszego parametru. Ścieżka jest względna do katalogu głównego instalacji Magento.

Nathan Toombs
źródło
1
dlaczego $ this-> getUrl ('pub / media / catalog / product') to daje mi ścieżkę do katalogu katalogu i ignorowanie katalogu produktu?
chirag dodia
6

wstrzyknij kierownika sklepu i po prostu uzyskaj podstawowy adres URL

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


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

Uwaga: nie twórz menedżera obiektów zawsze wstrzykuj

Surendra Kumar Ahir
źródło
3

Cóż, jeśli to Magento 2.0.0. Wersja stabilna CE i dowolny obiekt typu „Kontekst” jest już załadowany do klasy Block, tak jak Magento\Backend\Block\Widget\Contextwtedy wystarczy wywołać getStoreManager()->getStore()->getBaseUrl()funkcję jak poniżej:

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

wewnątrz konstruktora można również przekazywać argumenty takie jak \Magento\Framework\UrlInterface::URL_TYPE_MEDIAwewnątrz tej getBaseUrl()funkcji.

Mam nadzieję że to pomoże.

Vicky Dev
źródło
2

Prawidłowy sposób uzyskania multimediów w PHTML to:

$block->getViewFileUrl('images/myimage.png');
Arvind07
źródło
2

Po prostu: <?php $block->getBaseUrl() ?>

PЯINCƏ
źródło
1

W swoim głównym katalogu Magento utwórz plik 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
źródło
1

W pliku klasy bloku dodaj następującą funkcję:

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

I wywołaj to z pliku szablonu .phtml, wykonując następujące czynności:

$block->getImageUrl('<relative image path>')
Nahid
źródło
0

Możesz pobrać Magento2 Base URL, używając tego:

$this->_storeManager->getStore()->getBaseUrl()
Pratik Kamani
źródło
0

W magento 2.

Jeśli chcesz uzyskać podstawowy adres URL, możesz użyć poniższego kodu:

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

Korzystając z objectManager, możesz użyć następującego kodu

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

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

$storeManager->getStore()->getBaseUrl();
simya sreejith
źródło
-2

Oto szczegółowy samouczek, jak znaleźć podstawowy adres URL i inne w 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
źródło
w tym poście opisano, jak uzyskać adres URL w Magento 1.x, w logice magento 2, aby uzyskać adres URL, są różne.
joni jones
2
nie, jest też opis magento 2, ale poprzednia odpowiedź Amit Bera tutaj o wiele bardziej szczegółowa, a nie tylko link, powinna zostać zaakceptowana jako poprawna.
FireBear,