Webpack Encore - 在PHP中获取版本化文件

时间:2018-03-05 20:34:20

标签: php symfony webpack webpack-encore

我最近在Webpack Encore上安装了Symfony 4。 我使用一些静态资产来制作带有TCPDF的PDF。 要做到这一点,我曾经用他们的路径获取图像但是使用Webpack Encore版本,文件名是不同的,所以我不能用这种方式获得图像。 有没有一个解决方案来保持版本化并在PHP中访问这些图像?

PHP:

$logourl = trim("../public/build/images/tst_noir.png");
$pdf->Image($logourl, 135, 10.8, 42, 0);

Webpack app.js:

require('../images/tst_noir.png');

Webpack-config.js:

const Encore = require('@symfony/webpack-encore');

Encore
.setOutputPath('public/build/')
.setPublicPath('http://localhost/xxx/public/build')
.setManifestKeyPrefix('build/')
.cleanupOutputBeforeBuild()
.enableSourceMaps(!Encore.isProduction())
.autoProvidejQuery()
.addEntry('app', './assets/js/app.js');

module.exports = Encore.getWebpackConfig();

1 个答案:

答案 0 :(得分:0)

如果您拥有用于网站的资产设置的Symfony配置,您可以使用assets.packages包来获取文件的最终显示就绪URL:

use Symfony\Component\Asset\Package;
use Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy;

$package = new Package(new EmptyVersionStrategy());

// Absolute path
echo $package->getUrl('/image.png');
// result: /image.png

// Relative path
echo $package->getUrl('image.png');
// result: image.png

如果Symfony& amp;和/或者也应该处理版本控制和URL前缀。 Webpack配置(或直接设置组件)已经到位。

// webpack.config.js
if (Encore.isProduction()) {
    Encore.setPublicPath('https://my-cool-app.com.global.prod.fastly.net');
    Encore.setManifestKeyPrefix('build/');
}

在Symfony 3.0之前,templating.helper.assets提供了相同的功能,但现在您更有可能使用framework.assets.json_manifest_path:配置。