我正在尝试在 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/