Подтвердить что ты не робот

Assetic генерации ссылок, но без файлов

Я пытаюсь использовать assetic в symfony2 для управления моим css. Ссылки создаются отлично. Однако файлы не генерируются.

Здесь моя конфигурация:

Layout.html.twig

    {% stylesheets
      '@FooBundle/Resources/public/css/main.css'
      filter='cssrewrite'
    %}
    <link rel="stylesheet" href="{{ asset_url }}" />
    {% endstylesheets %}

config.yml

assetic:
debug:          %kernel.debug%
use_controller: false
bundles:        [ FooBundle ]
filters:
    cssrewrite: ~

Config_dev.yml

assetic:
use_controller: true

Assetic создает te link foo.foo/app_dev.php/css/957d3aa_main_1.css. Однако файла нет (или где-либо еще). Я пробовал играть с разрешениями и искать в журналах (nginx), но пока ничего.

Вся помощь будет принята с благодарностью.

4b9b3361

Ответ 1

У вас есть 2 варианта при работе с активами. Причина, по которой вы физически не видите свои активы на своем компьютере, состоит в том, что вы выбрали вариант 1.


Вариант 1: СИМФОНИЯ МОЖЕТ ПРОЦЕССИРОВАТЬ ФАЙЛЫ, ДИНАМИЧЕСКИ ДЛЯ ВАС

Это означает, что каждый путь к ресурсам, созданный в среде dev, обрабатывается динамически с помощью Symfony. Поэтому Assetic генерирует пути к файлам CSS и JavaScript, которые физически не существуют на вашем компьютере. Это внутренний контроллер Symfony, который открывает файлы и возвращает содержимое для вас.

<сильные > Преимущества:  - Изменения, внесенные в ваши активы, немедленно вступают в силу   - Это отлично в режиме dev, поскольку Symfony динамически генерирует файлы для вас.

Недостатки:  - Это невозможно в режиме prod, так как каждый актив динамически будет слишком медленным   - Активы не будут доступны напрямую на вашем компьютере (поэтому вы не можете найти файл)   - Может быть довольно медленным, если вы используете множество фильтров и т.д.

Чтобы сделать это в режиме dev, просто отредактируйте конфигурацию assetic в config_dev.yml:

assetic:
    use_controller: true

Вариант 2: ФАЙЛЫ АКТИВНЫХ ПАКЕТОВ

Если вы не хотите динамически обрабатывать активы, вы можете вручную сбросить свои активы, что означает фактическое написание ваших активов физически на вашем компьютере.

<сильные > Преимущества:  - Нет необходимости в Symfony генерировать файлы динамически, так что это будет работать намного быстрее   - Поэтому это идеальное решение в режиме prod   - Файлы физически доступны в каталоге web/(или где бы вы ни выбрали их)

Недостатки:  - Вам либо нужно сбрасывать активы каждый раз, когда вы что-то меняете, либо можете сбросить активы с помощью команды -watch, которая может быть немного раздражающей, если вы работаете в режиме dev.

Для этого:

Установить use_controller в false (config_dev.yml):

assetic:
    debug:          %kernel.debug%
    use_controller: false

Вы даже можете выбрать, где читать и выводить свои активы при необходимости

   assetic:
        read_from:      %kernel.root_dir%/Resources/views/
        write_to:       %kernel.root_dir%/../web/thefolderyouwant/

Теперь выход начинается с вашей конфигурации write_to в assetic

{% stylesheets
  '@FooBundle/Resources/public/css/main.css'
  output='css/main.css'
%}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

У вас будет ошибка ресурса, если вы продолжите, так что прокомментируйте или удалите этот сложный маршрут в config_dev.yml:

_assetic:
    resource: .
    type:     assetic

Наконец, вы можете автоматически генерировать активы, чтобы изменения, которые вы делаете, вступили в силу:

php app/console assetic:dump --watch

В этом случае файл должен быть доступен:

/web/thefolderyouwant/css/main.css

См. Поваренную книгу для получения дополнительной информации: Как использовать Assetic для управления активами?

Ответ 2

У меня была такая же проблема, мне просто нужно было установить java

sudo apt-get install default-jre

вы также можете посмотреть на начало вывода, это может помочь:

app/console assetic:dump > outfile 2>&1

Ответ 3

Он также не генерирует файлы, если use_controller: true включен, если вы используете SASS для компиляции SCSS, но ruby или рубиновый камень sass не установлен.

Ответ 4

У меня была ошибка, очень похожая на эту. Внезапно ассистент перестал работать. Единственное, что я добавил, это FOSRestBundle. Возможно, вы также используете остальную комплектацию.

Вот мое решение:

fos_rest:
    routing_loader:
        default_format: json

    param_fetcher_listener: true
    body_listener: true

    format_listener:
        rules:
            # render "/api" requests as json
            - { path: ^/api, priorities: [ json ], fallback_format: json, prefer_extension: true }
            # default, fallback rendering twig templates
            - { path: ^/, priorities: ['html', 'application/javascript', 'text/css', '*/*'], fallback_format: html, prefer_extension: true }

Я изменил priorities: ['html', '*/*'] на priorities: ['html', 'application/javascript', 'text/css', '*/*'], и теперь все работает нормально.

Ответ 5

Я наконец нашел решение !! Я работал над этим вопросом часами! Вы написали:

'@FooBundle/Resources/public/css/main.css' filter='cssrewrite'

НО фильтр cssrewrite не принимает синтаксис @FooBundle! Ты должен сделать:

php app/console assets:install

Symfony создаст:

web/bundles/yourbundle/css/main.css

Теперь в вашем шаблоне веточки замените:

'@FooBundle/Resources/public/css/main.css' filter='cssrewrite'

с:

'bundles/yourbundle/css/main.css' filter='cssrewrite'

Надеюсь, что это поможет кому-то еще! (написано в Symfony docs.. ^^)