Magento 2 Obtener imagen Url en controlador o ayudante?

9

Cómo obtener la imagen en el controlador o ayudante. Por ejemplo, la ruta de la carpeta de imágenes:

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

Respuestas:

13

Utilice el siguiente código para obtener la URL de la imagen en view

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

ACTUALIZAR:

<?php echo $block->getViewFileUrl('images/demo.jpg'); ?>
BornCoder
fuente
1
Esta respuesta es agradable y simple. La primera opción funcionó para mí.
Milan Simek
¿Cómo entrar en el archivo controlador?
jafar pinjar
20

Para obtener la Ruta de la imagen en su Ayudante o Controlador, debe usar

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

en su archivo
Una vez que agregue el repositorio y cree el objeto assetRepo& request, llame a la ruta de la imagen con la función,

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

Consulte la vendor\magento\module-payment\Model\CcConfig.php::getViewFileUrl($fileId, array $params = [])función

EDITAR

Para obtener las rutas de imagen correctas para los scripts de instalación, las llamadas a la API y Cronjobs, deberá agregar la emulación como se muestra a continuación para obtener las rutas de imagen correctas.

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

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

Jaimin Sutariya
fuente
Se produce un error -> Aviso: Propiedad indefinida: ... :: $ request in
Nitesh
lo obtuve de su referencia ty
Nitesh
Muchas gracias hombre. Es realmente útil para obtener la URL de la imagen.
Nitesh
@Jaimin, esto no funciona en recurringData.php, ¿lo has intentado allí?
jafar pinjar
1
@JaiminSutariya, sí. Estoy intentando en RecurringData.php, donde configuré Area_code como Global, por lo que la Url se está formando con _view / global que no funciona, puede intentarlo una vez con RecurringData.php, entonces obtendrá la idea sobre el problema
jafar pinjar