Categories: Мадженто 2

Код для получения ссылки сайта в Magento 2

Всякий раз, когда вы работаете над Magento2, вам нужно будет часто получать базовый URL (ссылку на главную страницу интернет-магазина), ссылку на папку с картинками (media), либо какой-то статический URL-адрес. Из этой статьи вы узнаете, как можно легко получить ссылку в Мадженто 2.

В Magento 1.х версий для получения ссылки на главную страницу использовался метод Mage::getBaseUrl(); а в Magento 2.х версий для этого используется немного другой подход.

 

 

Использование инъекции зависимостей

В Мадженто 2, если вы хотите получить базовый URL сайта, вы можете использовать следующий код:

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

 

Где $this->_storeManager – это экземпляр класса \Magento\Store\Model\StoreManagerInterface

 

Этот код даст вам такой результат:

https://site.com (если включено SEO URL Rewrite)
или https://site.com/index.php (если SEO URL Rewrite не включено)

 

Чтобы получить базовый URL без index.php, используйте код:

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

 

Для получения URL-адреса к папке с картинками (media), используйте код:

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

 

 

Для доступа к $this->_storeManager, вы должны использовать инъекцию зависимостей класса \Magento\Store\Model\StoreManagerInterface $storeManager для функции __construct() в классе Блока, например так:

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

 

 

 

Использование Менеджера Объектов

ВАЖНО! Данный метод является нерекомендуемым. Его можно использовать только для кратковременных целей разработки.

 

Чтобы получить базовый адрес сайта:

$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 непосредственно в шаблонах .phtml:

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

 

ВАЖНО! Повторюсь, что прямой вызов Менеджера Объектов – это не очень хорошая идея. Если вы хотите получить базовый URL в .phtml шаблонах, тогда используйте инъекцию зависимостей класса StoreManagerInterface в класс Блока.

 

Recent Posts

Удаленная разработка из тропиков: Техническая сторона, инфраструктура и организация рабочего пространства

Алоха! Последние несколько лет окончательно закрепили тренд на отдаленную работу. Для веб-разработчиков, DevOps-инженеров и администраторов…

1 неделя ago

Хмель, солод, дрожжи и вода: как создается характер пива

Кажется, пиво — напиток простой: четыре ингредиента, понятная технология. Но одни и те же хмель,…

2 недели ago

SIP-транки – что это такое и как они работают в IP-телефонии

В современной IP-телефонии немаловажную роль играет технология, обеспечивающая передачу голоса через Интернет между бизнесом и…

4 недели ago

Почему стоит выбрать ноутбук Apple MacBook Pro 14 для современных ИТ-задач

Выбор рабочей машины для веб-разработчика или администратора серверов — является всегда компромиссом между портативностью, автономностью…

4 недели ago

Практический гайд: как подобрать надежный бесперебойник для домашнего роутера

Исчез свет и вместе с ним мгновенно исчезла связь с окружающим миром? Это знакомая и…

1 месяц ago

Google теряет монополию: Как подготовить IT-сайт к AI-поиску (GEO)

Что вообще случилось с поиском в интернете? Я не побоюсь сказать это вслух: произошла настоящая…

1 месяц ago