Symfony 2.8:Bundle内CSS文件关联失败,请求解决
我来帮你一步步排查这个问题,这种bundle资源加载失败的情况在Symfony开发里挺常见的,咱们逐个环节检查:
第一步:执行资源安装命令
Symfony不会自动把Bundle里的public目录资源同步到项目的public/bundles目录,你需要手动运行这个命令:php bin/console assets:install public如果是开发环境,推荐加
--symlink参数创建软链接,这样后续修改Bundle里的资源不用重复执行命令:php bin/console assets:install public --symlink执行完后,你可以去
public/bundles/adminbundle目录下看看,styles.css是否已经被复制(或链接)过来了。第二步:检查Twig里的路径是否匹配
你的源文件路径是src/AdminBundle/Resources/public/styles.css,安装后它会被放到public/bundles/adminbundle/styles.css,但你在Twig里写的是bundles/adminbundle/css/styles.css——这里多了个css/子目录!
正确的Twig代码应该是:<link href="{{ asset('bundles/adminbundle/styles.css') }}" rel="stylesheet" type="text/css" />一定要保证Twig里的路径和实际生成的文件路径完全一致。
第三步:清除Symfony缓存
有时候旧的缓存会导致路径解析异常,尤其是开发环境下,运行命令清除缓存:php bin/console cache:clear第四步:确认Bundle已注册
检查config/bundles.php文件,确认AdminBundle已经被正确注册,应该有类似这样的一行:App\AdminBundle\AdminBundle::class => ['all' => true],如果没有这行,Symfony不会识别这个Bundle,自然也不会处理它的资源。
第五步:检查Assets配置(可选)
如果你自定义了Assets配置,打开config/packages/framework.yaml,确认assets部分没有错误配置导致路径偏移,默认情况下不需要额外配置,不过可以参考下面的示例确保基础配置正确:framework: assets: base_path: ''
如果做完以上步骤还是有问题,可以去浏览器的开发者工具里看一下请求的CSS文件实际路径,对比服务器上的文件位置,就能快速定位差异了。
内容的提问来源于stack exchange,提问作者Chandimal Harischandra

