จะรับ URL ฐานของ Magento 2 ได้อย่างไร


56

ใน Magento 1 Mage::getBaseUrl();แต่ใน Magento 2 ฉันต้องผ่านประเภทออบเจกต์คลาสที่รับผิดชอบในตัวสร้าง

ฉันไม่มีความคิดที่ฉันจะต้องผ่านชั้นเรียน?

คำตอบ:


114

ในวีโอไอพี 2

หากคุณต้องการได้รับ URL พื้นฐานคุณสามารถลองใช้รหัสด้านล่าง:

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

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

ที่ไหน$this->_storeManagerตัวอย่างของ\Magento\Store\Model\StoreManagerInterface

รหัสด้านบนนี้จะให้ผลลัพธ์แก่คุณ

http://www.example.com ( หากเปิดใช้งานการเขียน Seo ซ้ำ )

และ http://www.example.com/index.php ( หากไม่ได้เปิดใช้งานการเขียน Seo ซ้ำ )

หากคุณต้องการ URL ฐานโดยไม่ต้อง index.php

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

ดูรายละเอียดได้ที่ magento2 get base url and media url and static url

การใช้ Object Manager

URL ฐาน:

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

URL ฐานโดยไม่มี index.php

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

สำหรับการรับ URL ฐานสื่อ:

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

สำหรับการรับลิงค์ URL:

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

แก้ไข

สำหรับการได้รับ $this->_storeManager คุณควรโทรฉีด\Magento\Store\Model\StoreManagerInterface $storeManager

ที่ __construct( )ฟังก์ชั่นที่คลาสบล็อก

เหมือนกับ :

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

Updated:

นอกจากนี้คุณยังจะได้รับURL พื้นฐาน โดยตรงที่ใช้โทรโดยตรงของphtmlobject Manager

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

Directly call of object manager is not good ideaหมายเหตุ: หากคุณต้องการ URL พื้นฐานที่ phtml จากนั้นฉีดStoreManagerInterfaceที่บล็อก


3
ฉันจะไม่สนับสนุนการใช้ objectmanager โดยตรงอย่างที่กล่าวไว้ในคำตอบนี้ คุณควรทำสิ่งนี้โดยการฉีด StoreManager ลงในคลาส Block ของคุณเช่นที่กล่าวถึงในคำตอบนี้
7ochem

@ 7ochem มันขึ้นอยู่กับการโทรของนักพัฒนา :)
Amit Bera

2
จริงฉันยังคงกีดกันผู้พัฒนาให้ทำเช่นนั้น
7ochem

43

\Magento\Framework\View\Element\Templateเพียงแค่ใช้คำสั่งนี้กับคุณกำลังใช้คลาสที่ขยาย

$this->getBaseUrl()

ถ้าไม่ใช้สิ่งนี้:

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

หรือถ้าคุณใช้มันในเทมเพลต PHTML ให้ใช้:

$block->getBaseUrl()

สั้นและมีประสิทธิภาพ
Asish Hira

เยี่ยมมากขอบคุณ คุณรู้หรือไม่ว่าสิ่งนี้ต้องการการหลบหนีหรือไม่? Magento ยังไม่ได้ยืนยัน
Ben Crook

@ Ben-Space48 ไม่จำเป็นต้องมีภูมิประเทศเช่น Magento 1
Rafael Corrêa Gomes

1
คำตอบนี้สามารถใช้บริบทเพิ่มเติมได้จริงๆ \Magento\Framework\View\Element\Templateคุณกำลังสมมติว่าพวกเขาจะอยู่ในระดับที่ขยาย อย่างไรก็ตามคำถามของ OP ไม่ได้อ้างอิงถึงจุดที่เขากำลังเข้ารหัสอยู่ เช่น Model, Helper, Controller ฯลฯ
Darren Felton

ในเทมเพลต phtml คุณควรใช้ $ block-> getBaseUrl () แทนที่จะเป็น $ this-> getBaseUrl ()
Daniel Kratohvil


6

หากคุณต้องการรับ URL จากไดเรกทอรีรูทของ Magento install คุณสามารถใช้ getUrl ได้ มันสืบทอดมาจากคลาส AbstractBlock (Magento \ Framework \ View \ Element \ AbstractBlock) เพื่อให้คุณสามารถใช้บล็อกของคุณได้ นี่คือตัวอย่าง

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

พารามิเตอร์แรกคือเส้นทางที่คุณต้องการและตัวที่สองตั้งค่าตัวเลือก _secure หากผู้ใช้เรียกดูผ่าน https คุณสามารถเพิ่มลงในพา ธ ได้โดยการต่อชื่อไฟล์เฉพาะเข้ากับการเรียก getUrl หรือคุณสามารถเพิ่มลงในพารามิเตอร์แรกได้ พา ธ นั้นสัมพันธ์กับไดเรกทอรีรูทของการติดตั้ง Magento ของคุณ


1
ทำไม $ this-> getUrl ('pub / media / catalog / product') สิ่งนี้ทำให้ฉันมีเส้นทางไปยังไดเรกทอรีแคตตาล็อกและไม่สนใจไดเรกทอรีผลิตภัณฑ์?
chirag dodia

6

ฉีดผู้จัดการร้านค้าและรับ URL พื้นฐาน

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


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

หมายเหตุ: อย่าสร้างตัวจัดการออบเจ็กต์เสมอ


3

ถ้าเป็น Magento 2.0.0 CE เวอร์ชันที่เสถียรและวัตถุประเภท "บริบท" ใด ๆ ถูกโหลดแล้วในคลาสบล็อกเช่นMagento\Backend\Block\Widget\Contextนั้นเพียงแค่เรียกgetStoreManager()->getStore()->getBaseUrl()ใช้ฟังก์ชันดังต่อไปนี้:

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

ภายในนวกรรมิกนอกจากนี้คุณสามารถส่งผ่านข้อโต้แย้งเช่น\Magento\Framework\UrlInterface::URL_TYPE_MEDIAภายในgetBaseUrl()ฟังก์ชั่นนี้

หวังว่านี่จะช่วยได้




1

ในวีโอไอพีรูทของคุณให้สร้างไฟล์ 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

ในไฟล์คลาสบล็อกของคุณเพิ่มฟังก์ชั่นต่อไปนี้:

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

และเรียกสิ่งนี้จากไฟล์เทมเพลต. html ของคุณโดยทำดังนี้:

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


0

ในวีโอไอพี 2

หากคุณต้องการได้รับ URL พื้นฐานคุณสามารถใช้รหัสด้านล่าง:

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

โดยใช้ objectManager คุณสามารถใช้รหัสต่อไปนี้

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

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

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

-2

นี่คือรายละเอียดการสอนที่ฉันพบเพื่อรับ URL พื้นฐานและอื่น ๆ ใน Magento2 http://www.webmull.com/magento-2-getbase-url/

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

โพสต์นี้จะอธิบายวิธีรับ URL ใน magento 1.x ในตรรกะ magento 2 เพื่อรับ URL นั้นแตกต่างกัน
joni jones

2
ไม่มีคำอธิบายสำหรับ magento 2 ด้วย แต่คำตอบก่อนหน้านี้ของ Amit Bera ที่นี่มีรายละเอียดมากกว่าและไม่ใช่แค่ลิงค์ควรยอมรับว่าถูกต้อง
FireBear
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.