Symfony ищет ресурсы в относительном месте на основе URL-пути, по которому я перехожу. Активы загружаются и применяются правильно, когда я перехожу к пути «первого уровня», например example.com/mpre
, example.com/test
, example.com/foo
, но затем все мои активы 404, когда я перехожу к URL «второго уровня», такой как example.com/mpre/test
, example.com/test/foo
, example.com/foo/bar
, Почему это? Есть ли способ заставить фреймворк искать ресурсы в одном месте независимо от URL?
У меня есть 2 URL
example.com/mpre
example.com/mpre/test
Мои активы (css, js) нормально загружаются по первому URL, example.com/mpre
, но затем все они 404, когда я перехожу ко второму URL, 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
фильтрЯ включаю CSS в base.html.twig и использую сборку для компиляции
их
{% 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:
отладка:% kernel.debug%
use_controller:
включено:% kernel.debug%
профилировщик: ложь
read_from:% kernel.root_dir% / .. / web
write_to: %assetic.read_from%
Java: / usr / bin / java
узел: / usr / bin / node
путь_узла: []
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>
и все отлично работает.
Я предполагаю, что есть проблема с вашим написать в установка.
Попробуйте эти настройки и посмотрите, что произойдет.
assetic:
read_from: '%kernel.root_dir%/../web'
write_to: '%assetic.read_from%'
Это должны быть стандартные параметры конфигурации сборки для read_from а также написать в.
Ваши настройки показывают %kernel.root_dir%/../web/bundles/app/
, Assetic автоматически сгенерирует папки с пакетами, поэтому создайте свою собственную bundles
папка, вероятно, вызывает неожиданные результаты.
В bundles/
, app
соответствует вашей пачке AppBundle
, Пакет с именем FooBundle
будет иметь свои активы в web/bundles/foo/
и т.п.
Обязательно очистите кэш Symfony после внесения изменений в файл конфигурации.
Других решений пока нет …