Magento 2获取控制器或助手中的图像网址?


9

如何在控制器或帮助器中获取图像。例如,images文件夹的路径:

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

Answers:


13

使用以下代码获取图像网址 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

非常感谢老兄。这对于获取图片网址确实很有帮助。
Nitesh

@Jaimin,这在recurringData.php中不起作用,您在那里尝试过吗?
贾法尔·品哈尔(Jafar Pinjar)

1
@JaiminSutariya,是的。我正在RecurringData.php中尝试,在这里我将Area_code设置为Global,因此Url正在使用_view / global形成,但无法正常工作,您可以尝试使用RecurringData.php一次,然后您会得到关于该问题的想法
jafar pinjar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.