Magento 2のベースURLを取得する方法は?


56

Magento 1 Mage::getBaseUrl();では、Magento 2では、コンストラクターで責任あるクラスオブジェクトタイプを渡す必要があります。

どのクラスに合格しなければならないのかわかりませんか?

回答:


115

magento 2。

Base urlを取得したい場合は、以下のコードを試してください:

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

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

どこの$this->_storeManagerインスタンス\Magento\Store\Model\StoreManagerInterface

この上記のコードはあなたに結果を与えます

http://www.example.comSeo書き換えが有効な場合

そして http://www.example.com/index.phpソ・リライトが使用可能にされていない場合

なしでベースURLが必要な場合 index.php

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

詳細を参照してください magento2 get base url and media url and static url

オブジェクトマネージャーの使用

ベースURL:

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

index.phpなしのベースURL

$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 injectを呼び出す必要があり ます\Magento\Store\Model\StoreManagerInterface $storeManager

__construct( )機能ブロックのクラス

と同じように :

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

更新しました:

また、の直接呼び出しを使用してベース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。あなたがphtmlでベースURLが必要な場合はStoreManagerInterface、ブロックで注入します


3
この回答で述べたように、私はオブジェクトマネージャーを直接使用することを強くお勧めします。これを行うには、この回答でも述べたように、StoreManagerをBlockクラスに挿入します。
7ochem 16

@ 7ochem、それは開発者の呼び出しに依存します:)
Amit Bera

2
確かに

43

このコマンドは、拡張するクラスを使用しているときに使用します\Magento\Framework\View\Element\Template

$this->getBaseUrl()

そうでない場合は、これを使用します:

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

または、PHTMLテンプレートで使用している場合は、次を使用します。

$block->getBaseUrl()

ショートかつ効率的
Asish比良

よろしくお願いします。これをエスケープする必要があるかどうか知っていますか?Magentoはまだ検証していないようです。
ベン・クルック

@ベン・Space48は、Magentoの1として、花茎を必要としないでください
ラファエル・コレア・ゴメス

1
この答えは、実際にはもう少しコンテキストを使用できます。あなたはそれらが拡張するクラス内にあると仮定しています\Magento\Framework\View\Element\Template。しかし、OPの質問は、彼が現在コーディングしている場所について言及していません。モデル、ヘルパー、コントローラーなど
ダレンフェルトン

phtmlテンプレートでは、$ this-> getBaseUrl()の代わりに$ block-> getBaseUrl()を使用する必要があります
ダニエルクラトビル


6

MagentoインストールのルートディレクトリからURLを取得するだけの場合は、getUrlを使用できます。AbstractBlockクラス(Magento \ Framework \ View \ Element \ AbstractBlock)を継承しているため、任意のブロックで使用できます。ここに例があります

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

最初のパラメーターは目的のパスであり、2番目はユーザーがhttpsで参照している場合は_secureオプションを設定します。特定のファイル名をgetUrl呼び出しに連結してパスに追加するか、最初のパラメーターに追加できます。パスは、Magentoインストールのルートディレクトリからの相対パスです。


1
なぜ$ this-> getUrl( 'pub / media / catalog / product')これはカタログディレクトリへのパスを与え、製品ディレクトリを無視するのですか?
チラグドディア15

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()関数内のような引数を渡すことができます。

お役に立てれば。


2

PHTMLでメディアを取得する正しい方法は次のとおりです。

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


1

magentoルートで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 '#';
        }
    }

そして、以下を使用して、.phtmlテンプレートファイルからこれを呼び出します。

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


0

magento 2。

Base urlを取得する場合は、次のコードを使用できます。

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

objectManagerを使用すると、次のコードを使用できます

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

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

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

-2

これは、Magento2でベースURLとその他のURLを取得するために見つけた詳細なチュートリアルです。 http://www.webmull.com/magento-2-getbase-url/

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

この投稿では、magento 1.xでURLを取得する方法について説明します。URLを取得するmagento 2のロジックは異なります。
ジョニジョーンズ

2
いいえ、magento 2の説明もありますが、Amit Beraによる以前の回答は、リンクだけでなく、より詳細で、正しいものとして受け入れられるべきです。
FireBear
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.