Làm cách nào để có URL cơ sở Magento 2?


56

Trong Magento 1 Mage::getBaseUrl();, nhưng trong Magento 2 tôi phải chuyển loại đối tượng lớp có trách nhiệm trong hàm tạo.

Tôi không biết mình phải học lớp nào?

Câu trả lời:


115

Trong magento 2.

Nếu bạn muốn lấy url cơ sở, thì bạn có thể thử mã bên dưới:

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

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

Trường $this->_storeManagerhợp của\Magento\Store\Model\StoreManagerInterface

đoạn mã trên sẽ cho bạn kết quả

http://www.example.com ( Nếu Seo viết lại được bật )

http://www.example.com/index.php ( Nếu Seo viết lại không được bật )

Nếu bạn muốn URL cơ sở mà không có index.php

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

Xem chi tiết tại magento2 get base url and media url and static url

Sử dụng Trình quản lý đối tượng

Url cơ sở:

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

Url cơ sở không có index.php

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

Để nhận url cơ sở truyền thông:

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

để nhận url liên kết:

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

Biên tập

Để nhận được $this->_storeManager Bạn nên gọi tiêm\Magento\Store\Model\StoreManagerInterface $storeManager

tại __construct( )chức năng ở lớp khối

giống như :

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

Đã cập nhật:

Ngoài ra, bạn có thể nhận được địa chỉ cơ sở trực tiếp tại phtmlsử dụng cuộc gọi trực tiếp object Manager.

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

Lưu ý : Directly call of object manager is not good idea . Nếu bạn muốn url cơ sở tại phtml thì hãy tiêm StoreManagerInterfacetại khối


3
Tôi rất không khuyến khích việc sử dụng trực tiếp đối tượng, như được đề cập trong câu trả lời này. Bạn nên làm điều này bằng cách đưa StoreManager vào lớp Block của bạn, giống như được đề cập trong câu trả lời này.
7ochem

@ 7ochem, nó phụ thuộc vào cuộc gọi của nhà phát triển :)
Amit Bera

2
Đúng vậy, tôi vẫn rất khuyến khích các nhà phát triển làm như vậy
7ochem

43

Đơn giản chỉ cần sử dụng lệnh này với bạn đang sử dụng một lớp mở rộng \Magento\Framework\View\Element\Template.

$this->getBaseUrl()

Nếu không, sử dụng cái này:

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

Hoặc nếu bạn đang sử dụng nó trong mẫu PHTML, hãy sử dụng:

$block->getBaseUrl()

Ngắn gọn và hiệu quả
Asish Hira

Rất vui, cảm ơn bạn. Bạn có biết điều này có cần thoát hay không? Magento dường như chưa xác minh nó.
Ben Crook

@ Ben-Space48 Không cần scape, chẳng hạn như Magento 1.
Rafael Corrêa Gomes

1
Câu trả lời này thực sự có thể sử dụng một số bối cảnh hơn. Bạn đang cho rằng họ ở trong một lớp học mở rộng \Magento\Framework\View\Element\Template. Tuy nhiên, câu hỏi của OP không liên quan đến việc anh ta hiện đang viết mã từ đâu. Chẳng hạn như Người mẫu, Người trợ giúp, Người điều khiển, v.v.
Darren Felton

Trong mẫu phtml, bạn nên sử dụng $ block-> getBaseUrl () thay vì $ this-> getBaseUrl ()
Daniel Kratohvil

14

Trong Magneto2: Đây là cách để nhận liên kết Url trong tệp PHTML:

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

Tôi hy vọng nó sẽ làm việc cho bạn


6

Nếu bạn chỉ muốn nhận URL từ thư mục gốc của cài đặt Magento, bạn chỉ cần sử dụng getUrl. Nó kế thừa từ lớp AbstractBlock (Magento \ Framework \ View \ Element \ AbstractBlock) để bạn có thể sử dụng nó bất kỳ khối nào của bạn. Đây là một ví dụ

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

Tham số đầu tiên là đường dẫn bạn muốn và thứ hai đặt tùy chọn _secure nếu người dùng đang duyệt qua https. Bạn có thể thêm vào đường dẫn bằng cách nối một tên tệp cụ thể vào lệnh gọi getUrl hoặc bạn có thể thêm nó vào tham số đầu tiên. Đường dẫn liên quan đến thư mục gốc của bản cài đặt Magento của bạn.


1
tại sao $ this-> getUrl ('pub / media / catalog / sản phẩm') này cho tôi đường dẫn đến thư mục danh mục và bỏ qua thư mục sản phẩm?
chirag dodia

6

quản lý cửa hàng và chỉ cần lấy url cơ sở

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


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

Lưu ý: không tạo trình quản lý đối tượng luôn luôn tiêm


3

Chà nếu là Magento 2.0.0. Phiên bản ổn định CE và bất kỳ loại đối tượng "Ngữ cảnh" nào đã được tải trong lớp Block như Magento\Backend\Block\Widget\Contextsau đó chỉ cần gọi getStoreManager()->getStore()->getBaseUrl()hàm như bên dưới:

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

bên trong hàm tạo, bạn cũng có thể truyền các đối số như \Magento\Framework\UrlInterface::URL_TYPE_MEDIAbên trong getBaseUrl()hàm này .

Hi vọng điêu nay co ich.


2

Cách chính xác để nhận phương tiện trong PHTML là:

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


1

Trong tập tin gốc magento của bạn tạo tập tin 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

Trong tệp lớp khối của bạn thêm chức năng sau:

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

Và gọi nó từ tệp mẫu .phtml của bạn bằng cách sau:

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

0

Bạn có thể nhận url Magento2 Base bằng cách sử dụng:

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

0

Trong magento 2.

Nếu bạn muốn lấy url cơ sở, thì bạn có thể sử dụng mã dưới đây:

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

Bằng cách sử dụng objectManager, bạn có thể sử dụng đoạn mã sau

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

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

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

-2

Dưới đây là hướng dẫn chi tiết tôi tìm thấy để lấy url cơ sở và các url khác trong Magento2. http://www.webmull.com/magento-2-getbase-url/

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

bài đăng này mô tả cách lấy url trong magento 1.x, trong logic magento 2 để nhận url thì khác.
joni jones

2
không, cũng có mô tả cho magento 2, nhưng câu trả lời trước của Amit Bera ở đây chi tiết hơn nhiều và không chỉ là một liên kết, nên được chấp nhận là chính xác.
FireBear
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.