Magento 2'nin temel URL'sini nasıl edinebilirim?


56

Magento 1'de Mage::getBaseUrl();, ancak Magento 2'de, yapıcıda sorumlu sınıf nesne türünü geçmem gerekiyor.

Hangi dersten geçmem gerektiğine dair bir fikrim yok?

Yanıtlar:


114

Magento 2'de.

Base url’si almak istiyorsanız, aşağıdaki kodu deneyebilirsiniz:

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

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

Nerede $this->_storeManagerörneğinin\Magento\Store\Model\StoreManagerInterface

bu yukarıdaki kod size sonuç verecektir

http://www.example.com ( Seo yeniden yazma etkinse )

Ve http://www.example.com/index.php ( Eğer Seo yeniden yazma etkin değilse )

Temel URL’yi istemiyorsanız index.php

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

Ayrıntılara bakın. magento2 get base url and media url and static url

Nesne Yöneticisini Kullanma

Temel URL:

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

İndex.php olmadan Temel URL

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

Medya tabanı URL'sini almak için:

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

URL linkini almak için:

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

Düzenle

$this->_storeManager Sen almak için enjekte çağırmalıyız\Magento\Store\Model\StoreManagerInterface $storeManager

en __construct( )az fonksiyon bloğu sınıfı

sadece gibi:

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

Güncellenmiş:

Ayrıca alabilirsiniz baz url doğrudan en phtmldoğrudan çağrısı kullanarak object Manager.

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

Not: Directly call of object manager is not good idea . Eğer temel URL'yi phtml'de istiyorsanız StoreManagerInterface, bloğa enjekte edin .


3
Bu cevapta belirtildiği gibi, nesne yöneticisinin doğrudan kullanılmasını tavsiye etmem. Bunu, StoreManager'a Blok sınıfınıza enjekte ederek yapmalısınız, bu cevapta da belirtildiği gibi.
07

@ 7ochem, geliştirici çağrısına bağlıdır :)
Amit Bera

2
Doğru, geliştiricilerin bunu yapmaları konusunda hala cesaretini
keserdim

43

Basitçe bu komutu, yanınızda uzanan bir sınıf kullanıyorsanız kullanın \Magento\Framework\View\Element\Template.

$this->getBaseUrl()

Eğer değilse, bunu kullanın:

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

Veya bir PHTML şablonunda kullanıyorsanız, şunları kullanın:

$block->getBaseUrl()

Kısa ve verimli
Asish Hira

Güzel, teşekkürler. Bunun kaçması gerekip gerekmediğini biliyor musunuz? Magento henüz doğrulamadı.
Ben Crook

@ Ben-Space48 Magento 1 gibi scape gerekmez.
Rafael Corrêa Gomes

1
Bu cevap gerçekten biraz daha bağlam kullanabilirdi. Genişleyen bir sınıf içinde olduklarını varsayıyorsunuz \Magento\Framework\View\Element\Template. Bununla birlikte, OP'nin sorusu, şu anda nereden kodlandığı ile ilgili hiçbir referans yapmamaktadır. Model, Yardımcı, Kontrolör, vb.
Darren Felton,

Bir phtml şablonunda $ this-> getBaseUrl ()
Daniel Kratohvil

14

Magneto2'de: Bu, PHTML dosyasında URL linkini almanın yoludur:

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

Umarım sizin için işe yarar


6

Eğer sadece Magento kurulumunuzun kök dizininden bir URL almak istiyorsanız, sadece getUrl kullanabilirsiniz. AbstractBlock sınıfından miras alır (Magento \ Framework \ View \ Element \ AbstractBlock), böylece bloklarınızdan herhangi birini kullanabilirsiniz. İşte bir örnek

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

İlk parametre istediğiniz yoldur ve kullanıcı https üzerinden tarama yapıyorsa ikincisi _secure seçeneğini ayarlar. Belirli bir dosya adını getUrl çağrısına birleştirerek yola ekleyebilir veya ilk parametreye ekleyebilirsiniz. Yol, Magento kurulumunuzun kök dizinine göredir.


1
neden $ this-> getUrl ('pub / media / catalog / product') bu bana katalog dizinine girip ürün dizini görmezden geliyor?
chirag dodia

6

mağaza yöneticisine enjekte edin ve basitçe temel URL'yi alın

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


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

Not: Nesne yöneticisi oluşturmayın, daima enjekte edin


3

Peki ya Magento 2.0.0. CE Stable sürümü ve herhangi bir "Context" nesnesi türü, Magento\Backend\Block\Widget\Contextdaha önce olduğu gibi sadece getStoreManager()->getStore()->getBaseUrl()aşağıdaki gibi işlev çağrısı Block sınıfına yüklenmiştir :

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

yapıcı içinde ayrıca \Magento\Framework\UrlInterface::URL_TYPE_MEDIAbu getBaseUrl()işlevin içindeki gibi argümanları iletebilirsiniz .

Bu yardımcı olur umarım.


2

PHTML’de medya almanın doğru yolu:

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


1

Magento kökünüzde Test.php dosyası oluşturun.

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

Blok sınıf dosyanıza aşağıdaki işlevi ekleyin:

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

Ve bunu .phtml şablon dosyanızdan aşağıdaki şekilde çağırınız:

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

0

Bunu kullanarak Magento2 Base url'yi alabilirsiniz:

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

0

Magento 2'de.

Base url’si almak istiyorsanız, aşağıdaki kodu kullanabilirsiniz:

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

ObjectManager kullanarak, aşağıdaki kodu kullanabilirsiniz

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

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

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

-2

Temel URL'yi ve diğer Magento2'yi bulduğum ayrıntılı öğreticiyi burada bulabilirsiniz. http://www.webmull.com/magento-2-getbase-url/

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

Bu yazıda magento 1.x de url nasıl alınacağı, magento 2 de url almak için mantığın farklı olduğu açıklanmaktadır.
joni jones

2
hayır, ayrıca magento 2'nin açıklaması da var, ancak Amit Bera'nın önceki cevabı burada çok daha ayrıntılı ve sadece bir bağlantı değil, doğru olanı olarak kabul edilmelidir.
FireBear
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.