Как получить базовый URL Magento 2?


58

В Magento 1 Mage::getBaseUrl();, но в Magento 2 я должен передать ответственный тип объекта класса в конструктор.

У меня нет идеи, какой класс я должен пройти?

Ответы:


116

В пурпурный 2.

Если вы хотите получить базовый URL-адрес, попробуйте следующий код:

/**
* @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очг

@ 7очем, это зависит от вызова разработчика :)
Амит Бера

2
Правда, я все равно очень рекомендую разработчикам это делать
7ochem

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. Однако в вопросе OP нет ссылки на то, откуда он в данный момент кодирует. Такие как Модель, Помощник, Контроллер и т. Д.
Даррен Фелтон

В шаблоне 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 ('pub / media / catalog / product') дает мне путь к каталогу каталога и игнорирует каталог продукта?
Чираг Додия

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 и любой объект типа "Context" загружаются уже в классе Block, как 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, то вы можете использовать следующий код:

$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.