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.