Как заставить Symfony2 загружать файлы CSS, JS напрямую, а не через PHP? - PullRequest
17 голосов
/ 24 ноября 2011

СТАРЫЙ ВОПРОС, СМ. НИЖЕ ДЛЯ ОБНОВЛЕННОЙ ВЕРСИИ

Моя среда разработки не самая быстрая.Я принимаю примерно 500 мс на запрос PHP.Это начинает становиться проблемой с файлами ресурсов Symfony2, потому что каждый из файлов ресурсов запрашивается через внутренние контроллеры Symfony:

http://localhost/myproj/app_dev.php/js/bb8690a_part_4_myJavaScriptFile_2.js

Как видно,файлы загружаются через платформу Symfony, а не напрямую.Поскольку я начинаю загружать более 20 файлов, умножение на 500 мс делает загрузку страниц очень медленной.Я хочу загрузить файлы напрямую, но я не уверен, как это сделать.

Это часть config.yml:

# Assetic Configuration
assetic:
    debug:          %kernel.debug%
    use_controller: false
    # java: /usr/bin/java
    filters:
        cssrewrite: ~

Я думал установить use_controller в false сделает это, но нет.

Есть ли способ напрямую обработать загрузку этих ресурсов?

ОБНОВЛЕНИЕ:

ЭтоURL, который он пытается использовать сейчас:

http://localhost/myproj/_controller/js/bb8690a_part_4_myJavaScriptFile_2.js

Я установил use_controller в false как для dev, так и для общих настроек.Как мне избавиться от этой _controller части URL?

Редактировать: Если я очищаю кеш, запускаю assetic:dump и получаю use_controller как false, а затем при перезагрузке я получаю Cannot load resource ".".Я не смогу обойти эту проблему, если временно не включу use_controller для загрузки одной страницы.После этого я отключаю его и перезагружаю, и теперь он запрашивает с того недействительного URL, который содержит _controller.

Кажется, он также работает в prod, но не в dev.Странно.

Код шаблона:

{% stylesheets filter="cssrewrite"
            'bundles/outotecofil/css/reset.css'
            'bundles/outotecofil/css/*'

            output='css/dist/dist.css'
        %}
        <link rel="stylesheet" href="{{ asset_url }}" />
        {% endstylesheets %}

        {% javascripts
            '@OutotecCommonBundle/Resources/public/js/jquery-1.6.2.min.js'
            '@OutotecCommonBundle/Resources/public/js/jquery-ui-1.8.16.custom.min.js'
            '@OutotecCommonBundle/Resources/public/js/chosen.jquery.min.js'
            '@OutotecCommonBundle/Resources/public/js/widget/*'

            '@OutotecOFILBundle/Resources/public/js/OFILDependencyManager.js'
            '@OutotecOFILBundle/Resources/public/js/widget/*'
            '@OutotecOFILBundle/Resources/public/js/plant-scope.js'

            output='js/dist/dist.js'
        %}
        <script src="{{ asset_url }}"></script>
        {% endjavascripts %}

Чтобы быть предельно понятным: без app_dev.php (т.е. в режиме prod), он работает .Только в dev он не выдает и не выдает эту ошибку «Cannot load resource». »», Если я сначала не включу use_controller для одного запроса, после чего я могу отключить его и перезагрузить, хотя URL-адреса будут содержать _controller/ в их путях.

Ответы [ 5 ]

21 голосов
/ 25 ноября 2011

Попробуйте удалить эту часть кода в routing_dev.yml, когда use_controller имеет значение false:

_assetic:
    resource: .
    type:     assetic
6 голосов
/ 14 октября 2013

Из документации

Измените конфигурацию dev , чтобы избежать использования контроллера.

# app/config/config_dev.yml
assetic:
    use_controller: false

Удалите маршрут в routing_dev.ymlчтобы избежать побочного эффекта

# app/config/routing_dev.yml
_assetic:
    resource: .
    type:     assetic

Автоматически выдает файлы css / less при каждом изменении.

php app/console assetic:dump --watch
6 голосов
/ 19 июня 2012

Если вы используете assetic:dump, то вам нужно cache:clear -e dev

"... если вы запустите кеш: очистите производственный кеш, он нагревает кеш с включенным режимом отладки. Если вы попытаетесь сбросить ресурсы впоследствии, могут произойти странные вещи."

Я нашел это здесь: http://sftuts.com/using-assetic-in-symfony2-for-css-compression (4. параграф)

6 голосов
/ 24 ноября 2011

Документация Symfony - это всегда первое место, с которого можно начать поиск: Как использовать Assetic для управления активами

В среде prod файлы JS и CSS представлены одним тегом каждый. Другими словами, вместо того, чтобы видеть каждый файл JavaScript, который вы включаете в свой источник, вы, скорее всего, просто увидите что-то вроде этого:

<script src="/app_dev.php/js/abcd123.js"></script>

Более того, этот файл на самом деле не существует и динамически не обрабатывается Symfony (так как файлы ресурсов находятся в среде dev). Это сделано специально - позволить Symfony динамически генерировать эти файлы в производственной среде слишком медленно.

Вместо этого, каждый раз, когда вы используете свое приложение в среде prod (и, следовательно, при каждом развертывании), вы должны запускать следующую задачу:

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

Это будет физически генерировать и записывать каждый файл, который вам нужен (например, /js/abcd123.js). Если вы обновите какой-либо из ваших активов, вам нужно будет запустить его снова, чтобы восстановить файл.

1 голос
/ 09 апреля 2012

У меня такая же проблема, рабочая конфигурация: комментарий из routing_dev.yml:

_assetic:
 resource: .
 type:     assetic

установить для use_controller значение false. После этого я могу использовать сборку: dump и вижу рабочую страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...