symfony - Assetic 生成链接但没有文件

标签 symfony assetic

我正在尝试在 symfony2 中使用 Assets 来管理我的 css。
链接生成良好。但是,不会生成任何文件。

这是我的配置:

Layout.html.twig

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

配置文件
assetic:
debug:          %kernel.debug%
use_controller: false
bundles:        [ FooBundle ]
filters:
    cssrewrite: ~

config_dev.yml
assetic:
use_controller: true

Assetic 生成链接 foo.foo/app_dev.php/css/957d3aa_main_1.css .但是,该文件不存在(或其他任何地方)。我已经尝试使用权限并查看(nginx)日志,但到目前为止还没有。

所有帮助将不胜感激。

最佳答案

您有 2 个选项 在处理 Assets 时。您没有在计算机中实际看到 Assets 的原因是因为您选择了选项 1。

选项 1:SYMFONY 可以为您动态处理文件

这意味着在开发环境中生成的每个 Assets 路径都由 Symfony 动态处理。因此,Assetic 会生成计算机上实际不存在的 CSS 和 JavaScript 文件的路径。这是一个内部 Symfony Controller ,用于打开文件并为您提供内容。

优点:
- 对您的 Assets 所做的更改立即生效
- 这在开发模式下很棒,因为 Symfony 会为您动态生成文件

缺点:
- 这在生产模式下是不可能的,因为动态渲染每个 Assets 会太慢
- 无法在您的计算机上直接访问 Assets (这就是您找不到文件的原因)
- 如果您使用大量过滤器等,可能会很慢...

要在开发模式下执行此操作,只需在 config_dev.yml 中编辑 Assets 配置:

assetic:
    use_controller: true

选项 2:转储 Assets 文件

如果您不想动态处理 Assets ,您可以手动转储您的 Assets ,这意味着实际上在您的计算机上以物理方式编写您的 Assets 。

优点:
- 不需要 Symfony 动态生成文件,因此运行速度会快很多
- 因此,这在生产模式下是完美的
- 文件可在 web/目录(或您选择输出它们的任何地方)中物理访问

缺点:
- 每次更改某些内容时,您都需要转储 Assets ……或者您可以使用 --watch 命令转储 Assets ,如果您在开发模式下工作,这可能会有点烦人。

去做这个:

将 use_controller 设置为 false (config_dev.yml):
assetic:
    debug:          %kernel.debug%
    use_controller: false

如有必要,您甚至可以选择读取和输出 Assets 的位置
   assetic:
        read_from:      %kernel.root_dir%/Resources/views/
        write_to:       %kernel.root_dir%/../web/thefolderyouwant/

输出现在从您的 write_to 配置开始
{% stylesheets
  '@FooBundle/Resources/public/css/main.css'
  output='css/main.css'
%}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

您将有一个 resource error如果继续,请在 config_dev.yml 中注释或删除这些 Assets 路由:
_assetic:
    resource: .
    type:     assetic

最后,您可以自动生成 Assets ,以便您所做的更改立即生效:
php app/console assetic:dump --watch

在这种情况下,该文件现在应该可用:

/web/thefolderyouwant/css/main.css

有关更多信息,请参阅食谱:How to use Assetic for Asset Management?

关于symfony - Assetic 生成链接但没有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10863475/

相关文章:

symfony - 创建一个随时可用的 symfony 2 应用程序 zip

php - 使用 symfony 进行简单的 Doctrine 查询

mysql - SQLSTATE[23000] 同时向 Doctrine 2 和 Symfony 2 添加 3 个实体

postgresql - 无效的文本表示 : 7 ERROR: invalid input syntax for uuid: "test"

php - Symfony2 和 Twitter Bootstrap 字形图标

symfony - 如何在 Symfony2 中结合这些 Assets ?

mysql - Entity 和 MySQL (Symfony2) 中的 Doctrine 数组类型

symfony - Docker exec失败,权限被拒绝:未知

php - LessCSS Assetic @import 缓存禁用

Symfony Assetic 功能似乎不起作用