Bagaimana cara mendapatkan URL dasar Magento 2?


58

Di Magento 1 Mage::getBaseUrl();, tetapi di Magento 2 saya harus melewati tipe objek kelas yang bertanggung jawab dalam konstruktor.

Saya tidak tahu kelas mana yang harus saya lewati?

Jawaban:


116

Di Magento 2.

Jika Anda ingin mendapatkan URL Basis, maka Anda dapat mencoba kode di bawah ini:

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

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

Di mana $this->_storeManagercontoh\Magento\Store\Model\StoreManagerInterface

kode di atas ini akan memberi Anda hasil

http://www.example.com ( Jika Seo menulis ulang diaktifkan )

Dan http://www.example.com/index.php ( Jika Seo menulis ulang tidak diaktifkan )

Jika Anda ingin URL Basis tanpa index.php

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

Lihat detailnya di magento2 get base url and media url and static url

Menggunakan Object Manager

Url Basis:

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

URL Basis tanpa index.php

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

Untuk mendapatkan url basis media:

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

untuk mendapatkan url tautan:

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

Sunting

Untuk mendapatkan $this->_storeManager Anda harus memanggil inject\Magento\Store\Model\StoreManagerInterface $storeManager

di __construct( )fungsi di kelas blok

seperti :

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

Diperbarui:

Juga, Anda bisa mendapatkan url dasar langsung di phtmlmenggunakan panggilan langsung object Manager.

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

Catatan: Directly call of object manager is not good idea . Jika Anda ingin url dasar di phtml, maka suntikkan StoreManagerInterfacedi blok


3
Saya akan sangat mencegah penggunaan objectmanager secara langsung, seperti yang disebutkan dalam jawaban ini. Anda harus melakukan ini dengan menyuntikkan StoreManager ke dalam kelas Block Anda, seperti juga disebutkan dalam jawaban ini.
7ochem

@ 7ochem, itu tergantung pada panggilan pengembang :)
Amit Bera

2
Benar, saya masih akan sangat menyarankan pengembang untuk melakukannya
7ochem

43

Cukup gunakan perintah ini dengan Anda menggunakan kelas yang diperluas \Magento\Framework\View\Element\Template.

$this->getBaseUrl()

Jika tidak, gunakan ini:

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

Atau jika Anda menggunakannya dalam templat PHTML gunakan:

$block->getBaseUrl()

Singkat dan efisien
Asish Hira

Baik, terima kasih Apakah Anda tahu apakah ini perlu melarikan diri atau tidak? Magento tampaknya belum memverifikasinya.
Ben Crook

@ Ben-Space48 Tidak perlu scape, seperti Magento 1.
Rafael Corrêa Gomes

1
Jawaban ini benar-benar dapat menggunakan lebih banyak konteks. Anda mengasumsikan bahwa mereka berada dalam kelas yang diperluas \Magento\Framework\View\Element\Template. Namun pertanyaan OP tidak membuat referensi dari mana ia saat ini mengkodekan. Seperti Model, Helper, Controller, dll.
Darren Felton

Dalam templat phtml, Anda harus menggunakan $ block-> getBaseUrl () alih-alih $ this-> getBaseUrl ()
Daniel Kratohvil

14

Di Magneto2: Ini adalah cara untuk mendapatkan tautan Url dalam file PHTML:

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

Saya harap ini akan berhasil untuk Anda


6

Jika Anda hanya ingin mendapatkan URL dari direktori root instalasi Magento, Anda bisa menggunakan getUrl. Ini mewarisi dari kelas AbstractBlock (Magento \ Framework \ View \ Element \ AbstractBlock) sehingga Anda dapat menggunakannya sebagai salah satu dari blok Anda. Berikut ini sebuah contoh

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

Parameter pertama adalah jalur yang Anda inginkan, dan yang kedua menetapkan opsi _secure jika pengguna menjelajahi https. Anda dapat menambahkan ke path dengan menggabungkan nama file tertentu ke panggilan getUrl atau Anda dapat menambahkannya ke parameter pertama. Path relatif terhadap direktori root instalasi Magento Anda.


1
mengapa $ this-> getUrl ('pub / media / catalog / product') ini memberi saya jalur ke direktori katalog dan mengabaikan direktori produk?
chirag dodia

6

menyuntikkan manajer toko dan cukup mendapatkan url dasar

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


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

Catatan: jangan membuat manajer objek selalu menyuntikkan


3

Nah jika itu Magento 2.0.0. Versi CE Stable dan segala jenis objek "Konteks" sudah dimuat dalam kelas Blok seperti Magento\Backend\Block\Widget\Contextkemudian panggil getStoreManager()->getStore()->getBaseUrl()fungsi seperti di bawah ini:

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

di dalam konstruktor juga Anda bisa menyampaikan argumen seperti \Magento\Framework\UrlInterface::URL_TYPE_MEDIAdi dalam getBaseUrl()fungsi ini .

Semoga ini membantu.


2

Cara yang benar untuk mendapatkan media di PHTML adalah:

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


1

Di root magento Anda buat file 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

Dalam file kelas blok Anda, tambahkan fungsi berikut:

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

Dan panggil ini dari file template .phtml Anda dengan yang berikut:

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

0

Anda bisa mendapatkan url Magento2 Base dengan menggunakan ini:

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

0

Di Magento 2.

Jika Anda ingin mendapatkan URL Basis, maka Anda dapat menggunakan kode di bawah ini:

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

Dengan menggunakan objectManager, Anda dapat menggunakan kode berikut

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

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

$storeManager->getStore()->getBaseUrl();

-2

Ini adalah tutorial terperinci yang saya temukan untuk mendapatkan url dasar dan yang lainnya di Magento2. http://www.webmull.com/magento-2-getbase-url/

public function getBaseUrl()
{
    return $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
}

posting ini menjelaskan cara mendapatkan url di magento 1.x, dalam logika magento 2 untuk mendapatkan url berbeda.
joni jones

2
tidak, ada deskripsi untuk magento 2 juga, tetapi jawaban sebelumnya oleh Amit Bera di sini jauh lebih rinci dan bukan hanya tautan, harus diterima sebagai yang benar.
FireBear
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.