Код для получения ссылки сайта в 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
в класс Блока.