在处理资产时,您有 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 在assetic 中的配置开始
{% stylesheets
'@FooBundle/Resources/public/css/main.css'
output='css/main.css'
%}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
如果你继续,你将有一个resource error,所以注释掉或删除config_dev.yml中的这些资产路由:
_assetic:
resource: .
type: assetic
最后,您可以自动生成资产,以便您所做的更改立即生效:
php app/console assetic:dump --watch
在这种情况下,文件现在应该可用:
/web/thefolderyouwant/css/main.css
有关更多信息,请参阅食谱:How to use Assetic for Asset Management?