Как добавить определенные файлы в assetic?
У меня есть каталог собственных ресурсов для моего пакета, в котором есть несколько файлов:
/longpathtoSymfony/src/MyOwn/Bundle/MyOwnBundle/Resources/public
|-- bootstrap
| |-- css
| | |-- bootstrap-theme.css
| | |-- bootstrap-theme.min.css
| | |-- bootstrap.css
| | |-- bootstrap.min.css
| | `-- carousel.css
| |-- fonts
| | |-- glyphicons-halflings-regular.eot
| | |-- glyphicons-halflings-regular.svg
| | |-- glyphicons-halflings-regular.ttf
| | `-- glyphicons-halflings-regular.woff
| `-- js
| |-- bootstrap.js
| |-- bootstrap.min.js
| |-- holder.js
| `-- respond.min.js
|-- css
| `-- custom.css
|-- fonts
| |-- glyphicons-halflings-regular.svg
| |-- glyphicons-halflings-regular.ttf
| `-- glyphicons-halflings-regular.woff
|-- images
|-- img
`-- js
|-- html5shiv.js
|-- jquery-1.10.2.min.map
|-- jquery.js
`-- less-1.3.3.min.js
И все js и css файлы правильно помещаются в общую папку, поэтому я могу получить доступ к файлам bootstrap/css/xxx.css
и т.д., кроме файлов шрифтов.
Я не знаю, что я должен сделать, чтобы скопировать их в каталог web
. Если я попробую php app/console assetic:dump
, то копируются только файлы css и js:
php app/console assetic:dump
Dumping all dev assets.
Debug mode is on.
18:41:17 [file+] /longpathToSymfony/app/../web/css/bef717e.css
18:41:17 [file+] /longpathToSymfony/app/../web/css/bef717e_bootstrap.min_1.css
18:41:17 [file+] /longpathToSymfony/app/../web/js/6f9045a.js
18:41:17 [file+] /longpathToSymfony/app/../web/js/6f9045a_html5shiv_1.js
18:41:17 [file+] /longpathToSymfony/app/../web/js/6f9045a_respond.min_2.js
18:41:17 [file+] /longpathToSymfony/app/../web/css/0c1e28e.css
18:41:17 [file+] /longpathToSymfony/app/../web/css/0c1e28e_carousel_1.css
18:41:17 [file+] /longpathToSymfony/app/../web/js/0aa0509.js
18:41:17 [file+] /longpathToSymfony/app/../web/js/0aa0509_jquery_1.js
18:41:17 [file+] /longpathToSymfony/app/../web/js/0aa0509_bootstrap.min_2.js
18:41:17 [file+] /longpathToSymfony/app/../web/js/0aa0509_holder_3.js
18:41:17 [file+] /longpathToSymfony/app/../web/js/0aa0509_less-1.3.3.min_4.js
Что мне делать, чтобы включить также файлы шрифтов? У меня такая же проблема с jquery-1.10.2.min.map
, которая загружается динамически.
Есть ли способ сказать symfony "эй положить его в папку веб-ресурса, потому что некоторые из его компонентов нуждаются в этом"?
Ответы
Ответ 1
У меня была такая же проблема, и я просто попытался использовать следующее в качестве обходного пути. Кажется, работает до сих пор.
{% stylesheets
output='assets/fonts/glyphicons-halflings-regular.ttf'
'bundles/bootstrap/fonts/glyphicons-halflings-regular.ttf'
%}{% endstylesheets %}
Обратите внимание на отсутствие какого-либо вывода, что означает, что на шаблоне ничего не отображается. Когда я запускаю assetic:dump
, файлы копируются в нужное место, а css включает работу как ожидалось.
Ответ 2
В ветке у вас должен быть блок javascripts с чем-то вроде этого:
{% block javascripts %}
{% javascripts
'bundles/myown/bootstrap/js/bootstrap.js'
'bundles/myown/bootstrap/js/respond.js'
'bundles/myown/js/*'
%}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
{% endblock %}
То же самое касается вашего css.
{% block stylesheets %}
{% stylesheets
'bundles/myown/bootstrap/css/bootstrap-theme.css'
'bundles/myown/css/*'
filter='cssrewrite'
%}
<link rel="stylesheet" href="{{ asset_url }}">
{% endstylesheets %}
{% endblock %}
Теперь вы можете установить эти ресурсы для легкой разработки (app_dev.php) с помощью:
php app/console cache:clear --env=dev
php app/console assets:install web --symlink
На этом этапе вы должны увидеть символические папки ссылок в /longpathtoSymfony/web/bundles/myown, ссылающиеся на ваши ресурсы пакета. Преимущество опции symlink заключается в том, что вы можете вносить изменения в скрипты в папке пакета, и вам не нужно будет запускать эти ресурсы: установить команду, чтобы просмотреть эти изменения в браузере. Просто обновите.
Когда вы готовы перейти к производству, используйте команду assetic: dump. Это будет работать только с css, js и изображениями.. Вам нужно будет переместить папку шрифтов в веб-каталог вручную или написать свой собственный script, чтобы переместить этот материал для вас.
Убедитесь, что Assetic знает о вашем пакете в файле config.yml
assetic:
bundles: [ 'MyOwnBundle' ]
Теперь вы можете сбросить свои готовые активы с помощью:
php app/console cache:clear --env=prod
php app/console assetic:dump --env=prod
Итак, когда вы идете проверить это в браузере, просто удалите app_dev.php, и он должен загрузить ваши css и javascript из отдельных файлов, выгруженных в папки web/css и web/js. Это всего лишь один подход к использованию этих инструментов, но в большинстве случаев он работает для меня.
Ответ 3
-
установить активы с помощью команды php app/console assets:install target [--symlink]
-
доступ к файлам шрифтов с помощью функции asset()
twig:
asset('bundles/myown/fonts/glyphicons-halflings-regular.ttf')
* проверьте свои пути для функции активов
Ответ 4
Часть ответа была взята из здесь
Как установить путь к ресурсам для js, css и шрифтов
{% stylesheets
'@bootstrap_css'#this is some custom or bundled files which you want to include
'bundles/mybundle/css/custom.css'
filter="cssrewrite"
output='some/path/to.css'
%}
эта часть построит все css, которые представлены в одном файле, и поместите их на путь, который также представлен в примере кода.
Теперь to.css будет помещен в /web/some/path/to.css
то же самое для JS:
{% javascripts
'@jquery' #this is some custom or bundled files which you want to include
'@bootstrap_js'
'bundles/fosjsrouting/js/router.js'
output='js/compiled/app.js'
%}
Теперь у вас будет все js, которые строят в 1 файл с помощью пути /web/js/compiled/app.js
FY: в последних версиях symfony Assetic bundle не существует из коробки - он должен быть установлен дополнительно через композитор composer require symfony/assetic-bundle