在处理资产时,您有2 个选项。您在计算机中看不到资产的原因是您选择了选项 1。
选项 1:SYMFONY 可以为您动态处理文件
这意味着开发环境中生成的每个资产路径都由 Symfony 动态处理。因此,Assetic 会生成您计算机上实际不存在的 CSS 和 JavaScript 文件的路径。这是一个内部 Symfony 控制器,它打开文件并为您返回内容。
优点:
- 对资产所做的更改会立即生效 - 这在开发模式下非常有用,因为 Symfony 会为您动态生成文件
缺点:
- 这在 prod 模式下是不可能的,因为动态渲染每个资产会太慢 - 资产将无法在您的计算机上直接访问(这就是您找不到文件的原因) - 如果您正在使用可能会很慢很多过滤器等...
要在开发模式下执行此操作,只需在 config_dev.yml 中编辑资产配置:
assetic:
use_controller: true
选项 2:转储资产文件
如果您不想动态处理资产,您可以手动转储您的资产,这意味着实际上将您的资产以物理方式写入您的计算机上。
优点:
- Symfony 不需要动态生成文件,因此运行速度会更快 - 因此,这在 prod 模式下是完美的 - 文件可以在 web/ 目录中物理访问(或您选择输出它们的任何位置)
缺点:
- 每次更改某些内容时都需要转储资产..或者您可以使用 --watch 命令转储资产,如果您在开发模式下工作,这可能会有点烦人。
去做这个:
将 use_controller 设置为 false (config_dev.yml):
assetic:
debug: %kernel.debug%
use_controller: false
如有必要,您甚至可以选择在哪里读取和输出您的资产
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 %}
继续的话会出现资源错误,所以在config_dev.yml中注释掉或者删除这些资产路由:
_assetic:
resource: .
type: assetic
最后,您可以自动生成资产,以便您所做的更改立即生效:
php app/console assetic:dump --watch
在这种情况下,该文件现在应该可用:
/web/thefolderyouwant/css/main.css
有关更多信息,请参阅食谱:如何使用 Assetic 进行资产管理?