来自静态域或子域的Symfony2资产资源

时间:2012-09-01 15:20:36

标签: php caching symfony twig symfony-2.1

我正在尝试优化我的项目以避免使用静态资源发送cookie(即:图像,脚本,样式表等)。我的方法是创建一个static.my-domain.com域,从那里提供没有cookie的所有静态资源。

如何使用资产使用Symfony2从此域加载资源?

我正在使用Symfony 2.1 RC2

2 个答案:

答案 0 :(得分:4)

原来有assets_base_urls个选项可供您设置资源域。

答案 1 :(得分:1)

我添加了一些twig globals来处理这个

# config.yml
framework:
    templating:
        engines: ['twig']
        assets_version: 'dev'
        assets_version_format: "%%2$s/%%1$s"
    session:
        cookie_domain:        %session.cookie_domain%
twig:
    globals:
        assets_version: dev
        static_assets_base_url: %static_assets_base_url%
        static_images_base_url: %static_images_base_url%
        static_image: %static_images_base_url%/dev/ # I didn't know how to reference the assets_version, so this is the same value
        static_content: %static_images_base_url%/

# parameters.yml
parameters:
    session.cookie_domain: .myapp.dev
    static_assets_base_url: http://myapp-static.dev
    static_images_base_url: http://myapp-static.dev/path/to/web
  • 对于版本化和编译的css / js等,我打印{{ static_assets_base_url ~ asset_url }}
  • 对于版本化图片等,我打印{{ static_image ~ 'bundles/mybundle/img/icon.jpg' }}
  • 对于非版本化图片等,我打印{{ static_content ~ 'content/img/upload-123.jpg' }}

我不记得为什么我这样做了,但它与资产错误有关(多么令人惊讶)。它只是无法正确处理路径,有时它不会添加版本,或者它错误地处理它。

如果您必须手动修改资产版本,那将是一件痛苦的事情,因此您最好准备好部署脚本来执行此操作。

哦,请记住,Assetic不会将已编译的资产转储到指定的目录中,这是一个已知问题。所以你必须为这些目录添加自己的符号链接。

修改

如果您的应用位于子域中,则“session.cookie_domain”参数可让您使用相同的域并避免使用Cookie。如果您的应用未使用子域,则必须为静态资产使用单独的域。