Magento 2 Получить изображение URL в контроллере или помощнике?

9

Как получить изображение в контроллере или помощнике. Например, путь к папке с изображениями:

 /app/code/Nitesh/Module/view/frontend/web/images
 /app/code/Nitesh/Module/view/frontend/web/images/image.png
Nitesh
источник

Ответы:

13

Используйте приведенный ниже код для получения URL изображения в view

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

ОБНОВИТЬ:

<?php echo $block->getViewFileUrl('images/demo.jpg'); ?>
BornCoder
источник
1
Этот ответ приятен и прост. Первый вариант сработал для меня.
Милан Симек
как попасть в файл контроллера?
Джафар Пинджар
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
Большое спасибо, мужчина. Это действительно полезно для получения URL изображения.
Нитеш
@ Jaimin, это не работает в recurringData.php, ты пробовал там?
Джафар Пинджар
1
@JaiminSutariya, да. Я пытаюсь в RecurringData.php, где я устанавливаю Area_code как Глобальный, поэтому URL создается с _view / global, который не работает, вы можете попробовать один раз с RecurringData.php, тогда вы получите представление о проблеме
Джафар Пинджар