Magento 2 Obtenir l'URL de l'image dans le contrôleur ou l'aide?

9

Comment obtenir l'image dans le contrôleur ou l'aide. Par exemple, le chemin du dossier images:

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

Réponses:

13

Utilisez le code ci-dessous pour obtenir l'URL de l'image dans view

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

MISE À JOUR:

<?php echo $block->getViewFileUrl('images/demo.jpg'); ?>
BornCoder
la source
1
Cette réponse est agréable et simple. La première option a fonctionné pour moi.
Milan Simek
comment entrer dans le fichier contrôleur?
jafar pinjar
20

Pour obtenir le chemin de l'image dans votre assistant ou contrôleur, vous devez utiliser

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

dans votre dossier.
Une fois que vous avez ajouté le référentiel et créé l'objet assetRepo& request, appelez le chemin de l'image avec la fonction,

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

Se référer à la vendor\magento\module-payment\Model\CcConfig.php::getViewFileUrl($fileId, array $params = [])fonction

ÉDITER

Pour obtenir des chemins d'image corrects pour les scripts d'installation, les appels d'API et les Cronjobs, vous devrez ajouter une émulation comme ci-dessous pour obtenir des chemins d'image corrects.

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

Référence: https://magento.stackexchange.com/a/297121/2443

Jaimin Sutariya
la source
Une erreur survient -> Remarque: propriété non définie: ... :: $ request in
Nitesh
obtenu de votre référence
Nitesh
Merci beaucoup. Son vraiment utile pour obtenir l'URL de l'image.
Nitesh
@Jaimin, cela ne fonctionne pas dans recurringData.php, avez-vous essayé là-bas?
jafar pinjar
1
@JaiminSutariya, oui. J'essaye dans RecurringData.php, où j'ai défini Area_code comme Global, donc l'URL se forme avec _view / global qui ne fonctionne pas, vous pouvez essayer une fois avec RecurringData.php, puis vous aurez une idée du problème
jafar pinjar