Magento 2: Получить паб / статический путь к файлу


9

Мне нужно получить файл PATH для изображения в pub/static/[VENDOR_THEME]папке.

В настоящее время я могу сделать это с помощью помощника:

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

Есть ли встроенная функция Magento, которая обрабатывает это, поэтому мне не нужно создавать свой собственный помощник?


Как насчет вашей проблемы?
Khoa TruongDinh

Ответы:


8

Как утверждает @Khoa TruongDinh, вы можете использовать Magento\Framework\View\Asset\Repositoryкласс для получения файлового класса Magento\Framework\View\Asset\File, который затем можно использовать для получения различных данных.

/** @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');

Чтобы получить актив в папке вашей темы, app/design/frontend/VENDOR/THEME/webпросто удалите имя модуля, как показано ниже ....

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

Смотрите Magento\Framework\View\Asset\Fileдля функций, которые вы можете использовать, чтобы получить данные файла.

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

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

// Get the content of the file
$asset->getContent();

этот код не работает в RecurringData.php
Джафар Пинджар

0

В нашем блоке мы должны попробовать:

$block->getViewFileUrl('/')

введите описание изображения здесь

Взглянуть:

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

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

РЕДАКТИРОВАТЬ: мы можем использоватьMagento\Framework\View\Asset\Repository

Например: ваше изображение находится под: 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);

Смотрите больше здесь: Magento 2 Получить изображение URL в контроллере или помощнике?


2
Мне нужен ПУТЬ - не URL
минлар

@minlare см. мой обновленный ответ.
Khoa TruongDinh

Этот код я пытаюсь в RecurringData.php, он не работает
Джафар Пинджар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.