Как добавить определенные файлы в assetic? - программирование
Подтвердить что ты не робот

Как добавить определенные файлы в 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 "эй положить его в папку веб-ресурса, потому что некоторые из его компонентов нуждаются в этом"?

4b9b3361

Ответ 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