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?

sivakumar
sumber

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

Amit Bera
sumber
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()
Rafael Corrêa Gomes
sumber
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

Chandra Prakash Gupta
sumber
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.

Nathan Toombs
sumber
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

Surendra Kumar Ahir
sumber
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.

Vicky Dev
sumber
2

Cara yang benar untuk mendapatkan media di PHTML adalah:

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

Secara sederhana: <?php $block->getBaseUrl() ?>

PЯINCƏ
sumber
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();
Jitendra Mohanta
sumber
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>')
Nahid
sumber
0

Anda bisa mendapatkan url Magento2 Base dengan menggunakan ini:

$this->_storeManager->getStore()->getBaseUrl()
Pratik Kamani
sumber
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();
simya sreejith
sumber
-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);
}
Gaurav Jain
sumber
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