Magento 2: Obter caminho de arquivo pub / estático

9

Preciso obter o arquivo PATH para uma imagem na pub/static/[VENDOR_THEME]pasta.

Atualmente, eu posso fazer isso usando um auxiliar:

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

Existe alguma função Magento embutida que lida com isso, então não preciso criar meu próprio auxiliar?

minlare
fonte
E o seu problema?
Khoa TruongDinh

Respostas:

8

Como o @Khoa TruongDinh afirma, você pode usar o Magento\Framework\View\Asset\Repositorypara obter uma classe de arquivo Magento\Framework\View\Asset\File, que pode ser usada para obter vários dados.

/** @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 obter ativos em sua pasta de temas, app/design/frontend/VENDOR/THEME/websimplesmente retire o nome do módulo como abaixo ....

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

Veja as Magento\Framework\View\Asset\Filefunções que você pode usar para obter dados do arquivo.

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

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

// Get the content of the file
$asset->getContent();
minlare
fonte
este código não está funcionando em RecurringData.php
Jafar pinjar
0

No nosso bloco, devemos tentar com:

$block->getViewFileUrl('/')

insira a descrição da imagem aqui

Dê uma olhada:

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

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

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

Por exemplo: sua imagem está em: 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);

Veja mais aqui: Magento 2 Obter URL da imagem no controlador ou auxiliar?

Khoa TruongDinh
fonte
2
Eu preciso do PATH - não do URL
minlare
@minlare veja minha resposta atualizada.
precisa saber é o seguinte
Este código que estou tentando em RecurringData.php, não o seu trabalho
Jafar pinjar