如何让Symfony2直接加载CSS,JS文件,而不是通过PHP加载?

Tow*_*wer 17 php symfony

旧问题,请参阅下面的更新版本

我的开发环境不是最快的.每个PHP请求大约需要500毫秒.它开始成为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: ~
Run Code Online (Sandbox Code Playgroud)

我想设置use_controllerfalse会做,但没了.

有没有办法直接处理这些资源的装载?

更新:

这是它现在尝试使用的URL:

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

我已use_controllerfalse了既开发和一般CONFIGS.如何摆脱_controllerURL 的那一部分?

编辑:如果我清除缓存,运行assetic:dump并拥有use_controlleras false,然后重新加载我得到Cannot load resource ".".除非我暂时启用use_controller一个页面加载,否则我无法解决该问题.之后,我禁用它并重新加载,现在它从包含的无效URL请求_controller.

它似乎也在刺激,但不是在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 %}
Run Code Online (Sandbox Code Playgroud)

非常清楚:没有app_dev.php(即在prod模式下),它可以工作.只有在开发它不并抛出这个"无法加载资源"""的错误,除非我第一次启用use_controller了一个请求,之后,我可以禁用它,并重新加载虽然网址将随后包含_controller/在他们的路径.

小智 21

当use_controller为false时,尝试删除routing_dev.yml中的这部分代码:

_assetic:
    resource: .
    type:     assetic
Run Code Online (Sandbox Code Playgroud)


小智 6

Symfony文档始终是第一个开始查看的地方:如何使用Assetic进行资产管理

在prod环境中,JS和CSS文件分别由单个标记表示.换句话说,您可能只会看到以下内容,而不是查看您在源代码中包含的每个JavaScript文件:

<script src="/app_dev.php/js/abcd123.js"></script>
Run Code Online (Sandbox Code Playgroud)

此外,该文件实际上并不存在,也不是Symfony动态呈现的(因为资产文件在开发环境中).这是故意的 - 让Symfony在生产环境中动态生成这些文件太慢了.

相反,每次在prod环境中使用您的应用程序时(因此,每次部署时),您都应该运行以下任务:

php app/console assetic:dump --env=prod --no-debug
Run Code Online (Sandbox Code Playgroud)

这将物理生成并编写您需要的每个文件(例如/js/abcd123.js).如果更新任何资产,则需要再次运行此资产以重新生成文件.


fiv*_*ive 6

如果你使用assetic:dump,那么你必须cache:clear -e dev

"...如果您在生产缓存上运行缓存:清除,它会在启用调试模式的情况下预热缓存.如果您之后尝试转储资产,可能会发生奇怪的事情."

我在这里找到了它:http://sftuts.com/using-assetic-in-symfony2-for-css-compression(4.段)


gag*_*ine 6

文档中

修改dev配置以避免使用控制器.

# app/config/config_dev.yml
assetic:
    use_controller: false
Run Code Online (Sandbox Code Playgroud)

删除routing_dev.yml中的路由以避免副作用

# app/config/routing_dev.yml
_assetic:
    resource: .
    type:     assetic
Run Code Online (Sandbox Code Playgroud)

每次修改时自动转储css/less文件.

php app/console assetic:dump --watch
Run Code Online (Sandbox Code Playgroud)