Wie erhalte ich die Magento 2-Basis-URL?

56

In Magento 1 Mage::getBaseUrl();, aber in Magento 2 muss ich im Konstruktor den Objekttyp der verantwortlichen Klasse übergeben.

Ich habe keine Ahnung, welche Klasse ich bestehen muss?

sivakumar
quelle

Antworten:

115

In Magento 2.

Wenn Sie die Basis-URL erhalten möchten, können Sie den folgenden Code versuchen:

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

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

Wo $this->_storeManagerInstanz von\Magento\Store\Model\StoreManagerInterface

Dieser obige Code gibt Ihnen das Ergebnis

http://www.example.com ( Wenn Seo Rewrite aktiviert ist )

Und http://www.example.com/index.php ( Wenn Seo Rewrite nicht aktiviert ist )

Wenn Sie die Basis-URL ohne möchten index.php

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

Details finden Sie unter magento2 get base url and media url and static url

Verwenden des Objektmanagers

Basis-URL:

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

Basis-URL ohne index.php

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

Zum Abrufen der Media Base-URL:

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

um die Link-URL zu erhalten:

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

Bearbeiten

Um das zu bekommen $this->_storeManager solltest Du inject anrufen\Magento\Store\Model\StoreManagerInterface $storeManager

at __construct( )function in der Blockklasse

so wie :

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

Aktualisiert:

Sie können aber auch erhalten Basis - URL direkt bei phtmlVerwendung von direktem Aufruf von object Manager.

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

Hinweis: Directly call of object manager is not good idea . Wenn Sie eine Basis-URL bei phtml wollen, dann fügen Sie diese StoreManagerInterfacebei block ein

Amit Bera
quelle
3
Ich würde dringend davon abraten, den Objektmanager direkt zu verwenden, wie in dieser Antwort erwähnt. Sie sollten dies tun, indem Sie den StoreManager in Ihre Block-Klasse einfügen, wie auch in dieser Antwort erwähnt.
7ochem
@ 7ochem, es kommt auf Entwickleranruf an :)
Amit Bera
2
Es
stimmt
43

Verwenden Sie einfach diesen Befehl, wenn Sie eine Klasse verwenden, die erweitert wird \Magento\Framework\View\Element\Template.

$this->getBaseUrl()

Wenn nicht, benutze dies:

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

Oder wenn Sie es in einer PHTML-Vorlage verwenden:

$block->getBaseUrl()
Rafael Corrêa Gomes
quelle
Kurz und effizient
Asish Hira
Schön, danke. Wissen Sie, ob dies entkommen muss oder nicht? Magento scheint es noch nicht verifiziert zu haben.
Ben Crook
@ Ben-Space48 Brauche keine Scape wie Magento 1.
Rafael Corrêa Gomes
1
Diese Antwort könnte wirklich mehr Kontext gebrauchen. Sie nehmen an, dass sie zu einer Klasse gehören, die sich ausdehnt \Magento\Framework\View\Element\Template. Die Frage des OP bezieht sich jedoch nicht darauf, woher er gerade codiert. Wie Modell, Helfer, Controller, etc.
Darren Felton
In einer HTML-Vorlage sollten Sie $ block-> getBaseUrl () anstelle von $ this-> getBaseUrl () verwenden
Daniel Kratohvil
14

In Magneto2: So erhalten Sie den URL-Link in der PHTML-Datei:

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

Ich hoffe es wird für dich funktionieren

Chandra Prakash Gupta
quelle
6

Wenn Sie nur eine URL aus dem Stammverzeichnis Ihrer Magento-Installation erhalten möchten, können Sie einfach getUrl verwenden. Es erbt von der AbstractBlock-Klasse (Magento \ Framework \ View \ Element \ AbstractBlock), sodass Sie es in jedem Ihrer Blöcke verwenden können. Hier ist ein Beispiel

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

Der erste Parameter ist der gewünschte Pfad und der zweite Parameter legt die Option _secure fest, wenn der Benutzer über https navigiert. Sie können dem Pfad hinzufügen, indem Sie dem getUrl-Aufruf einen bestimmten Dateinamen zuordnen, oder Sie können ihn dem ersten Parameter hinzufügen. Der Pfad ist relativ zum Stammverzeichnis Ihrer Magento-Installation.

Nathan Toombs
quelle
1
Warum gibt $ this-> getUrl ('pub / media / catalog / product') mir den Pfad zum Katalogverzeichnis und ignoriert das Produktverzeichnis?
Chirag Dodia
6

Ladenmanager einspritzen und einfach Basis-URL holen

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


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

Hinweis: Erstellen Sie Objektmanager nicht immer injizieren

Surendra Kumar Ahir
quelle
3

Na wenn es Magento 2.0.0 ist. CE Stable-Version und alle "Context" -Objekttypen sind bereits in der Block-Klasse geladen. Magento\Backend\Block\Widget\ContextRufen Sie einfach die folgende getStoreManager()->getStore()->getBaseUrl()Funktion auf:

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

Innerhalb des Konstruktors können Sie auch Argumente wie \Magento\Framework\UrlInterface::URL_TYPE_MEDIAin dieser getBaseUrl()Funktion übergeben.

Hoffe das hilft.

Vicky Dev
quelle
2

Der richtige Weg, um Medien in PHTML zu erhalten, ist:

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

Einfach: <?php $block->getBaseUrl() ?>

PЯINCƏ
quelle
1

Erstellen Sie in Ihrem Magento-Stammverzeichnis die Datei 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
quelle
1

Fügen Sie in Ihrer Blockklassendatei folgende Funktion hinzu:

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

Rufen Sie dies in Ihrer .phtml-Vorlagendatei folgendermaßen auf:

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

Sie können die Magento2 Base-URL folgendermaßen abrufen:

$this->_storeManager->getStore()->getBaseUrl()
Pratik Kamani
quelle
0

In Magento 2.

Wenn Sie die Basis-URL erhalten möchten, können Sie den folgenden Code verwenden:

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

Mit objectManager können Sie den folgenden Code verwenden

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

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

$storeManager->getStore()->getBaseUrl();
Simya Sreejith
quelle
-2

Hier ist das detaillierte Tutorial, das ich gefunden habe, um die Basis-URL und andere in Magento2 zu bekommen. http://www.webmull.com/magento-2-getbase-url/

public function getBaseUrl()
{
    return $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
}
Gaurav Jain
quelle
In diesem Beitrag wird beschrieben, wie man URLs in Magento 1.x abruft.
Joni Jones
2
nein, es gibt auch eine beschreibung für magento 2, aber frühere antworten von amit bera hier viel detaillierter und nicht nur als link, sollten als richtig akzeptiert werden.
FireBear