9

How to get the image in the controller or helper. For example, the path of images folder:

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

2 Answers 2

14

Use below code for getting image url in view

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

UPDATE:

<?php echo $block->getViewFileUrl('images/demo.jpg'); ?>
2
  • 1
    This answer is nice and simple. The first option worked for me. Commented May 31, 2017 at 16:16
  • how to get in controller file? Commented Nov 26, 2019 at 12:42
21

To get Image Path in your Helper or Controller, you need to use

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

in your file.
Once you add the repository and create object assetRepo & request, call image path with function,

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

Refer to vendor\magento\module-payment\Model\CcConfig.php::getViewFileUrl($fileId, array $params = []) function

EDIT

To get correct image paths for Setup scripts, API calls and Cronjobs, you will require to add emulation like below to get correct image paths.

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();
}

Reference: https://magento.stackexchange.com/a/297121/2443

10
  • Error comes -> Notice: Undefined property: ...::$request in Commented Feb 7, 2017 at 7:10
  • got it from your reference ty Commented Feb 7, 2017 at 7:20
  • Thanks alot man. Its really helpful to getting image url. Commented Feb 7, 2017 at 7:29
  • @Jaimin, this is not working in recurringData.php, have u tried there? Commented Nov 27, 2019 at 10:32
  • 1
    @JaiminSutariya, Yes. I'm trying in RecurringData.php, where i set Area_code as Global, so the Url is forming with _view/global which is not working, you may try once with RecurringData.php , then u you will get the idea about the issue Commented Nov 27, 2019 at 13:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.