Копирование и ссылание на изображения
Дата обновления перевода 2024-07-25
Копирование и ссылание на изображения
Вам нунжо сослаться на статичный файл - вроде пути к изображения для тега img?
Это может быть сложно, если вы храните свои ресурсы вне корня публичных документов.
К счастью, в зависимости от вашей ситуации, есть решение!
Ссылание на изображения из файла JavaScript Webpack
Чтобы сослаться на тег изображения из файла JavaScript file, затребуйте файл:
1 2 3 4 5 6 7
// assets/app.js
// возвращает финальный публичный путь к этому файлу
// путь относителен этого файла - к примеру, assets/images/logo.png
import logoPath from '../images/logo.png';
let html = `<img src="${logoPath}" alt="ACME logo">`;Когда вы require (или import) файл изображения, Webpack копирует
его в ваш каталог вывода и возвращат финальный, публичный путь к этому файлу.
Ссылание на изображения из шаблона
Чтобы сослаться на файл вне файла JavaScript, обрабатываемого Webpack -
вроде шаблона - вы можете использовать метод copyFiles(), чтобы скопировать
эти файлы в ваш финальный каталог вывода. Для начала, включите его в webpack.config.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// webpack.config.js
  Encore
      // ...
      .setOutputPath('public/build/')
+     .copyFiles({
+         from: './assets/images',
+
+         // необязательный целевой путь, относительно dir вывода
+         to: 'images/[path][name].[ext]',
+
+         // если подключено версионирование, добавьте также хеш файла
+         //to: 'images/[path][name].[hash:8].[ext]',
+
+         // копируйте только файлы, совпадающие с данным паттерном
+         //pattern: /\.(png|jpg|jpeg)$/
+     })Затем перезапустите Encore. Когда вы это сделаете, он даст вам команду, которую вы можете выполнить для установки недостающих зависимостей. После выполнения этой команды и перезапуска Encore, вы закончили!
Это скопирует все файлы из assets/images в public/build/images.
Если у вас подключено версионирование, скопированные файлы
будут включать в себя хеш, основанный на их содержании.
Чтобы отобразить внутри Twig, используйте функцию asset():
1 2 3 4 5
{# assets/images/logo.png был скопирован в public/build/images/logo.png #}
<img src="{{ asset('build/images/logo.png') }}" alt="ACME logo">
{# assets/images/subdir/logo.png был скопирован в public/build/images/subdir/logo.png #}
<img src="{{ asset('build/images/subdir/logo.png') }}" alt="ACME logo">Убедитесь в том, что вы включили опцию json_manifest_path ,
которая указывает функции asset() считывать финальные пути из файла manifest.json.
Если вы не уверены, какой путь аргумента передать функции asset(), найдите файл
в manifest.json и используйте ключ в качестве аргумента.