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

Как заставить Symfony2 загружать файлы CSS, JS напрямую, а не через PHP?

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

Моя среда разработки не самая быстрая. Я беру примерно 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 будет делать это, но нет.

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

UPDATE:

Это 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 это не делает и выбрасывает эту ошибку "Невозможно загрузить ресурс". "", Если я не включу сначала только use_controller для одного запроса, после чего я могу отключить его и перезагрузить, хотя URL-адреса будут содержать _controller/ в своих путях.

4b9b3361

Ответ 1

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

_assetic:
    resource: .
    type:     assetic

Ответ 2

Документация по 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). Если вы обновите какое-либо из ваших активов, вам нужно будет запустить это снова, чтобы восстановить файл.

Ответ 3

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

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

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

Ответ 4

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

Измените конфигурацию 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

Ответ 5

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

_assetic:
 resource: .
 type:     assetic

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