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?

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


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()

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


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.


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


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.


2

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

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


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();

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>')

0

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

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

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();

-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);
}

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.