doumeng1897
2018-03-05 20:34
浏览 114
已采纳

Webpack Encore - 用PHP获取版本化文件

I installed Symfony 4 with Webpack Encore recently. I use some static assets to make a PDF with TCPDF. To do that, I used to get images with their path but with Webpack Encore versionning, filenames are different so I can't get images this way. Is there a solution to keep versionning and access these images in 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();

图片转代码服务由CSDN问答提供 功能建议

我最近用Webpack Encore安装了Symfony 4。 我使用一些静态资产来制作带有TCPDF的PDF。 为此,我曾经用路径获取图像,但是使用Webpack Encore版本,文件名不同,所以我无法以这种方式获取图像。 有解决方案吗? 保持版本控制并在PHP中访问这些图像?

PHP:

  $ logourl = trim(“../ public / build /  images / tst_noir.png“); 
 $ pdf->图片($ 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://本地主机/ XXX /公/编译')(!Encore.isProduction())
.setManifestKeyPrefix( '构建/')
.cleanupOutputBeforeBuild()
.enableSourceMaps 
.autoProvidejQuery()  
.addEntry('app','。/ assets / js / app.js'); 
nnnmodule.exports = Encore.getWebpackConfig(); 
   
 
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongyuandou2521 2018-03-05 21:39
    已采纳

    If you have the Symfony configuration for the assets setup for the use on a website, you can use the assets.packages package to fetch the final display-ready URLs for a file:

    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
    

    Versioning and URL prefixes should also be handled if the Symfony & Webpack configuration (or setting up the component directly) has been put in place.

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

    Before Symfony 3.0, templating.helper.assets provided much the same functionality, but now you are more likely to use the framework.assets.json_manifest_path: config.

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题