Magento 2: Obtener ruta de archivo pub / static

9

Necesito obtener el archivo PATH para una imagen en la pub/static/[VENDOR_THEME]carpeta.

Actualmente, puedo hacer esto usando un ayudante:

public function __construct(
    \Magento\Framework\App\Helper\Context $context,
    \Magento\Framework\View\Asset\Repository $assetRepository,
    \Magento\Framework\App\Filesystem\DirectoryList $directoryList
) {
    parent::__construct($context);
    $this->_assetRepo = $assetRepository;
    $this->_directoryList = $directoryList;
}

public function getImagePath($image)
{
    return $this->_directoryList->getPath(DirectoryList::STATIC_VIEW) . 
        '/' . 
        $this->_assetRepo->getStaticViewFileContext()->getPath() . 
        '/' . 
        $image;
}

¿Hay alguna función incorporada de Magento que maneje esto, por lo que no tengo que crear mi propio ayudante?

minlare
fuente
¿Qué tal tu problema?
Khoa TruongDinh

Respuestas:

8

Como @Khoa TruongDinh afirma que puede usar Magento\Framework\View\Asset\Repositorypara obtener una clase de archivo Magento\Framework\View\Asset\File, que luego puede usar para obtener diversos datos.

/** @var `Magento\Framework\View\Asset\Repository $assetRepository **/
 $asset = $this->assetRepository->createAsset('Magento_Catalog::images/image.png');
 $asset = $this->assetRepository->createAsset('My_Module::images/image.png');

Para obtener activos en su carpeta de temas app/design/frontend/VENDOR/THEME/websimplemente elimine el nombre del módulo como se muestra a continuación ...

$asset = $this->assetRepository->createAsset('images/image.png');

Consulte las Magento\Framework\View\Asset\Filefunciones que puede usar para obtener datos de archivos.

// Get the file url
$asset->getUrl();

// Get the file path
$asset->getFilePath();

// Get the content of the file
$asset->getContent();
minlare
fuente
este código no funciona en RecurringData.php
jafar pinjar
0

En nuestro bloque, deberíamos intentar con:

$block->getViewFileUrl('/')

ingrese la descripción de la imagen aquí

Echar un vistazo:

  • vendor/magento/module-backend/view/adminhtml/templates/page/js/require_js.phtml

  • vendor/magento/module-theme/view/frontend/templates/page/js/require_js.phtml

EDITAR: podemos usarMagento\Framework\View\Asset\Repository

Por ejemplo: su imagen está debajo de: app/code/Vendor/Module/view/frontend/web/images/image.png

/** @var `Magento\Framework\View\Asset\Repository $assetRepository **/

$this->assetRepository->getUrlWithParams('Vendor_Module::images/image.png', $params);

Ver más aquí: Magento 2 Obtener imagen Url en controlador o ayudante?

Khoa TruongDinh
fuente
2
Necesito la RUTA - no la url
minlare
@minlare ver mi respuesta actualizada.
Khoa TruongDinh
Este código que estoy probando en RecurringData.php no funciona
jafar pinjar