Шрифт Bootstrap glyphicons font не найден при использовании assetic в prod на Symfony2

Я прочитал много сообщений об этом, но не смог заставить это работать для моего проекта.

Таким образом, у меня есть проект Symfony2, который включает twitter bootstrap (v3). Все отлично работает в режиме dev, но когда я пробую его в режиме prod, у меня появились ошибки, говорящие о том, что шрифты бутстрапа twitter не найдены:

Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/Symfony/css/fonts/glyphicons-halflings-regular.woff Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/Symfony/css/fonts/glyphicons-halflings-regular.ttf Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/Symfony/css/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular 

Это нормально, потому что у меня нет css / folder в Symfony /

Вот как структурирован проект:

 app/ src/ vendor/ web/ css/ compiled/ fonts/ js/ 

twig файл:

 {% block stylesheets %} {% stylesheets output="css/compiled/main.css" filter='cssrewrite' 'css/bootstrap.min.css' 'css/general.css' 'css/navigation.css' %} <link rel="stylesheet" href="{{ asset_url }}" /> {% endstylesheets %} {% endblock %} 

Я использовал:

 php app/console assetic:dump --env=prod 

Я проверил файлы bootstrap.min.css (в файлах web / css / compiled) (prod и dev), и оба они имеют одинаковый путь для шрифтов. Что-то вроде (../../../fonts/fontName.ext).

Если мы посмотрим на путь, он не должен работать ни в dev, ни в режиме prod, поскольку путь помещает шрифты / файл за пределы веб-каталога. Тем не менее, он работает в режиме dev.

Любая идея о том, как разрешить это?

Я был бы великодушен.

Если вы используете фильтр «cssrewrite», он переписывает путь к файлам-шрифтам (к их исходному источнику), как уже сказал Maxoo .

Вы можете добавить ассетный путь для файлов шрифтов следующим образом (чтобы они были скопированы в папку css/fonts/ и css-файлы найдут их с использованием оригинального пути ../fonts/ )

Я использовал следующее решение:

config.yml:

 assetic: debug: %kernel.debug% use_controller: false assets: bootstrap_fonts_woff: inputs: - 'original/path/to/bootstrap/fonts/glyphicons-halflings-regular.woff' output: fonts/glyphicons-halflings-regular.woff bootstrap_fonts_ttf: inputs: - 'original/path/to/bootstrap/fonts/glyphicons-halflings-regular.ttf' output: fonts/glyphicons-halflings-regular.ttf bootstrap_fonts_svg: inputs: - 'original/path/to/bootstrap/fonts/glyphicons-halflings-regular.svg' output: fonts/glyphicons-halflings-regular.svg bootstrap_fonts_eot: inputs: - 'original/path/to/bootstrap/fonts/glyphicons-halflings-regular.eot' output: fonts/glyphicons-halflings-regular.eot 

Затем позвоните

 php app/console assetic:dump --env=prod 

который должен экспортировать файлы в каталог fonts внутри вашей веб-папки.

Надеюсь это поможет!

Вам не нужно искать их по Symfony/ path, infact Symfony2 webfolder – это web/ поэтому URL-адрес является «относительным» для web/ каталога.

BTW, вы должны использовать следующую команду

 php app/console assets:install 

Если вам нравится иметь символические --symlink вы также можете добавить параметр --symlink в свою команду

Так в чем разница между активами: install и активностью: свалка?

assets:install символизирует или копирует нужные ресурсы в «общедоступную веб-папку»,

assetic:dump объединяет только js в один

Правильное решение:

  • Установите Nodejs, настройте файл конфигурации symfony2, он автоматически сгенерирует фильтр cssrewrite по вашему выбору в CSS. Это устранит эти ошибки.

  • my config.yml и config_dev.yml выглядят как просто аксессуарная секция. Будьте очень осторожны с синтаксисом пути, иначе вы получите эту ошибку. Ошибка при запуске: … Ошибка: не удается найти модуль «less» «Any многие люди столкнулись с этими тремя сообщениями об ошибках в этой строке, чтобы узнать «Произошла ошибка во время работы: Ошибка: не удается найти модуль« меньше »»

assetic:

 debug: '%kernel.debug%' use_controller: enabled: '%kernel.debug%' profiler: true filters: cssrewrite: ~ ###is for linux path i am on windows for dev and linux for prod less: ###node: /usr/bin/nodejs ###node_paths: [/usr/lib/nodejs] node: "C:\\Program Files (x86)\\nodejs\\node.exe" node_paths: ["C:\\Users\\John\\AppData\\Roaming\\npm\\node_modules"] apply_to: "\.less$" 
  • не забудьте установить «npm install -g less»

  • В моем конкретном случае: при выполнении «php app / console assetic: dump» я получаю эту же ошибку. Это связано с тем, что мой веб-сервер Windows dev настроен следующим образом: корень сети – «C: \ xampp \ htdocs», и проект похож на этот «C: \ xampp \ htdocs \ phantom \», а assetic: dump помещает глификон -halflings-regular.ttf, glyphicons-halflings-regular.woff и glyphicons-halflings-regular.woff2 в «C: \ xampp \ htdocs \ phantom \ web \ fonts» ОДНАКО, когда страница загружается, она выглядит в « http: // localhost / ", как вы видите, это проблема с моей настройкой разработки. Поэтому я копирую шрифты папки «C: \ xampp \ htdocs \ phantom \ web \ fonts» в веб-root «C: \ xampp \ htdocs». ​​Это решает проблему.

  • Это не произойдет в рабочей среде, где ваш корневой сервер веб-сервера «C: \ xampp \ htdocs \ phantom \ web \». Я тестировал на рабочем сервере без необходимости вручную копировать папку шрифтов в webroot.

  • Кроме того, при выполнении той же команды в каталоге проекта «php app / console assetic: dump» вы получите ошибку, например «FileError: .. ../bootstrap/less/bootstrap.less» не найден. /bootstrap/less/bootstrap.less,C:\xampp\htdocs\phantom\vendor\mopa\bootstrap-bundle\Mopa\Bundle_BootstrapBundle\Resources\public\bootstrap "Той же начальной загрузкой был установлен" php app / консольные ресурсы: установите «in» C: \ xampp \ htdocs \ phantom \ web \ bootstrap ", что не соответствует директории webroot, чтобы снова решить эту же временную проблему в процессе разработки. Я просто скопирую каталог" C: \ xampp \ htdocs \ phantom \ web \ bootstrap "на" C: \ xampp \ htdocs \ bootstrap ", который решает проблему. Выполните команду снова, она будет компилироваться, чтобы css красиво и чисто.

Может быть, вы должны попытаться сохранить структуру папок Bootstrap без изменений (например, загружая ее с помощью беседки). Кстати, фильтр cssrewrite будет анализировать ваши файлы css, чтобы отобразить расположение шрифтов.