Як отримати базову URL-адресу Magento 2?


56

У Magento 1 Mage::getBaseUrl();, але в Magento 2 я повинен передати тип конструктора відповідального класу в конструкторі.

Я не маю уявлення, який клас я повинен пройти?

Відповіді:


114

У магенто 2.

Якщо ви хочете отримати URL-адресу Base, ви можете спробувати нижче код:

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

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

Де $this->_storeManagerінстанція\Magento\Store\Model\StoreManagerInterface

цей вище код дасть результат

http://www.example.com ( Якщо перезапис Seo увімкнено )

І http://www.example.com/index.php ( Якщо перезапис Seo не ввімкнено )

Якщо ви хочете Базову URL-адресу без index.php

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

Детальніше дивіться на magento2 get base url and media url and static url

Використання диспетчера об'єктів

Базова URL-адреса:

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

Базова URL-адреса без index.php

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

Для отримання URL-адреси медіа-бази:

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

для отримання URL-адреси посилання:

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

Редагувати

Для отримання $this->_storeManager Вам слід зателефонувати ін’єкційно\Magento\Store\Model\StoreManagerInterface $storeManager

у __construct( )функції на блоковому класі

так як :

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

Оновлено:

Крім того, ви можете отримати базовий URL безпосередньо при phtmlпрямому виклику object Manager.

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

Примітка: Directly call of object manager is not good idea . Якщо ви хочете базувати URL на phtml, тоді введіть StoreManagerInterfaceу блок


3
Я б дуже не перешкоджав використанню управління об'єктом безпосередньо, як це було зазначено у цій відповіді. Ви повинні зробити це, ввівши StoreManager у свій клас Block, як це також було зазначено у цій відповіді.
7оч.

@ 7ochem, це залежить від дзвінка розробника :)
Amit Bera

2
Правда, я все-таки сильно
заважаю

43

Просто використовуйте цю команду, коли ви використовуєте клас, який розширюється \Magento\Framework\View\Element\Template.

$this->getBaseUrl()

Якщо ні, використовуйте це:

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

Або якщо ви використовуєте його в шаблоні PHTML, використовуйте:

$block->getBaseUrl()

Короткий та ефективний
Асіш Хіра

Приємно, дякую. Чи знаєте ви, чи потрібно це втекти чи ні? Здається, Magento ще не підтвердив це.
Бен Крук

@ Ben-Space48 Не потрібно скапування, наприклад, Magento 1.
Рафаель Корреа Гомес

1
Ця відповідь справді може використати ще якийсь контекст. Ви припускаєте, що вони знаходяться в класі, який розширюється \Magento\Framework\View\Element\Template. Однак питання ОП не посилається на те, звідки він зараз кодується. Такі як модель, Helper, Controller тощо
Даррен Фелтон

У шаблоні phtml слід використовувати $ block-> getBaseUrl () замість $ this-> getBaseUrl ()
Даніель Кратохвіль,


6

Якщо ви просто хочете отримати URL-адресу з кореневого каталогу установки Magento, ви можете просто скористатись getUrl. Він успадковується від класу AbstractBlock (Magento \ Framework \ View \ Element \ AbstractBlock), тому ви зможете використовувати його будь-яким із своїх блоків. Ось приклад

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

Перший параметр - це шлях, який ви хочете, а другий встановлює параметр _secure, якщо користувач переглядає https. Ви можете додати до шляху шляхом об'єднання конкретного імені файлу на виклик getUrl або ви можете додати його до першого параметра. Шлях відноситься до кореневого каталогу вашої Magento.


1
чому $ this-> getUrl ('паб / медіа / каталог / продукт') це дає мені шлях до каталогу каталогу та ігнорування каталогу продуктів?
chirag dodia

6

вкажіть менеджер магазину та просто отримайте базовий URL

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


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

Примітка: не створюйте диспетчер об'єктів завжди вводити


3

Добре, якщо це Magento 2.0.0. Стабільна версія CE і будь-який тип об'єкту "Контекст" завантажуються вже в клас "Блок", як Magento\Backend\Block\Widget\Contextтоді getStoreManager()->getStore()->getBaseUrl()функція просто виклику, як показано нижче:

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

всередині конструктора також можна передавати такі аргументи, як \Magento\Framework\UrlInterface::URL_TYPE_MEDIAвсередині цієї getBaseUrl()функції.

Сподіваюся, це допомагає.


2

Правильний спосіб отримання медіа в PHTML:

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


1

У вашому корені magento створіть файл 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

У файл класу блоків додайте наступну функцію:

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

І зателефонуйте до цього із вашого файлу шаблонів .phtml із наступним:

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


0

У магенто 2.

Якщо ви хочете отримати URL-адресу Base, тоді ви можете скористатися наведеним нижче кодом:

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

Використовуючи objectManager, ви можете використовувати наступний код

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

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

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

-2

Ось детальний підручник, який я знайшов, щоб отримати базовий URL та інші в Magento2. http://www.webmull.com/magento-2-getbase-url/

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

у цій публікації описано, як отримати URL в magento 1.x, в логіці magento 2 для отримання URL-адреси різні.
Джоні Джонс

2
ні, для Magento 2 також є опис, але попередня відповідь Аміта Бера тут набагато більш детальна і не лише посилання, повинна бути прийнята як правильна.
FireBear
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.