Magento 2コントローラーまたはヘルパーで画像URLを取得しますか?


9

コントローラーまたはヘルパーで画像を取得する方法。たとえば、画像フォルダのパス:

 /app/code/Nitesh/Module/view/frontend/web/images
 /app/code/Nitesh/Module/view/frontend/web/images/image.png

回答:


13

以下のコードを使用して画像のURLを取得します view

<img src="<?php echo $this->getViewFileUrl('Vendor_Module::images/image.png'); ?>" />

更新:

<?php echo $block->getViewFileUrl('images/demo.jpg'); ?>

1
この答えは素晴らしく、シンプルです。最初のオプションは私のために働いた。
ミラノシメック

どのようにコントローラーファイルに入るのですか?
jafar pinjar

20

ヘルパーまたはコントローラーで画像パスを取得するには、使用する必要があります

use Magento\Framework\View\Asset\Repository;
use Magento\Framework\App\RequestInterface; // for $this->request

ファイル内。
リポジトリを追加してオブジェクトassetRepo&を作成したらrequest、関数でイメージパスを呼び出し、

$params = array('_secure' => $this->request->isSecure());
$this->assetRepo->getUrlWithParams('Nitesh_Module::images/image.png', $params);

vendor\magento\module-payment\Model\CcConfig.php::getViewFileUrl($fileId, array $params = [])機能を参照

編集

セットアップスクリプト、API呼び出し、Cronjobsの正しい画像パスを取得するには、以下のようなエミュレーションを追加して正しい画像パスを取得する必要があります。

public function __construct(
    \Magento\Framework\View\Asset\Repository $assetRepo,
    \Magento\Framework\App\RequestInterface $request,
    \Magento\Store\Model\App\Emulation $appEmulation
)
{
    $this->assetRepo = $assetRepo;
    $this->request = $request;
    $this->appEmulation = $appEmulation;
}

public FunctionName($param){
    $this->appEmulation->startEnvironmentEmulation($storeId, \Magento\Framework\App\Area::AREA_FRONTEND, true);

    $params = array('_secure' => $this->request->isSecure());
    $this->assetRepo->getUrlWithParams('Nitesh_Module::images/image.png', $params);

    $this->appEmulation->stopEnvironmentEmulation();
}

リファレンス:https : //magento.stackexchange.com/a/297121/2443


エラーが発生->通知:未定義のプロパティ:... :: $ request in
Nitesh

参考資料から入手
Nitesh 2017

どうもありがとう。画像のURLを取得するのにとても役立ちます。
Nitesh 2017

@Jaimin、これはrecurringData.phpでは機能しません。
jafar pinjar

1
@JaiminSutariya、はい。私は、URLが動作していない_VIEW /グローバルで形成されるように、あなたはRecurringData.phpで一度、そしてuはあなたが問題についてのアイデアを得るでしょう試すことが、私はグローバルとしてArea_codeを設定RecurringData.php、にしようとしています
jafar pinjar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.