Symfony希望根据我导航到的网址路径在相对位置查找资产。当我导航到"第一级"时,资产加载并正确应用路径,例如example.com/mpre
,example.com/test
,example.com/foo
,但是当我导航到"第二级"时,我的所有资产404 example.com/mpre/test
,example.com/test/foo
,example.com/foo/bar
等网址。为什么是这样?有没有办法让框架在资源的一个位置查看,而不管网址是什么?
我有2个网址
example.com/mpre
example.com/mpre/test
我的资源(css,js)在第一个网址example.com/mpre
上加载正常,但是当我导航到第二个网址example.com/mpre/test
当我进入每页的检查员以查看资产的路径时,我会看到以下内容:
example.com/bundles/app/css/023f7f6_style.css_4.css //example.com/mpre 200 OK response
example.com/mpre/bundles/app/css/c8b625f_style.css_3.css //example.com/mpre/test 404 Not Found response
在config.yml
中,我有以下资产:
assetic:
write_to: %kernel.root_dir%/../web/bundles/app/
cssrewrite
过滤器我在base.html.twig中包含css并使用assetic进行编译 它们
{% stylesheets
'@AppBundle/Resources/assets/css/bootstrap_loader.css.scss'
'@AppBundle/Resources/assets/css/stately/*'
'@AppBundle/Resources/assets/css/bootstrapValidator.min.css'
'@AppBundle/Resources/assets/css/style.css.scss'
'@AppBundle/Resources/assets/css/learners.css'
%}
路径是标准路线。每条路径对应一个控制器 提出观点的行动
以下是资产404时的视图
./app/console config:dump-reference assetic
带别名的扩展程序的默认配置:" assetic"
assetic: debug:%kernel.debug% use_controller: 启用:%kernel.debug% profiler:false read_from:%kernel.root_dir%/ .. / web write_to:%assetic.read_from% java:/ usr / bin / java node:/ usr / bin / node node_paths:[] ruby:/home/ubuntu/.rvm/rubies/ruby-2.0.0-p195/bin/ruby sass:/home/ubuntu/.rvm/gems/ruby-2.0.0-p195/bin/sass 变量:
# Prototype
name: []
bundles:
# Defaults:
- FrameworkBundle
- SecurityBundle
- TwigBundle
- MonologBundle
- SwiftmailerBundle
- AsseticBundle
- DoctrineBundle
- SensioFrameworkExtraBundle
- AppBundle
- LswMemcacheBundle
- WebProfilerBundle
- SensioDistributionBundle
- SensioGeneratorBundle
assets:
# Prototype
name:
inputs: []
filters: []
options:
# Prototype
name: []
filters:
# Prototype
name: []
workers:
cache_busting:
enabled: false
twig:
functions:
# Prototype
name: []
我找到了问题的根源。链接路径是相对的,所以我将其更改为使用baseUrl。 <script src="{{ app.request.baseUrl }}/bundles/app{{ asset_url }}"></script>
,一切都很好。
答案 0 :(得分:0)
我假设您的 write_to 设置存在问题。
尝试这些设置,看看会发生什么。
assetic:
read_from: '%kernel.root_dir%/../web'
write_to: '%assetic.read_from%'
这些应该是 read_from 和 write_to 的默认资产配置设置。
您的设置显示%kernel.root_dir%/../web/bundles/app/
。 Assetic会自动生成捆绑包文件夹,因此设置您自己的bundles
文件夹可能会导致意外结果。
在bundles/
中,app
对应您的论坛AppBundle
。名为FooBundle
的捆绑包会在web/bundles/foo/
等中拥有该资产
确保在更改配置文件后清除Symfony缓存。