25

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

这是我的配置:

布局.html.twig

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

配置.yml

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)日志,但到目前为止还没有。

所有帮助将不胜感激。

4

5 回答 5

36

在处理资产时,您有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 进行资产管理?

于 2012-06-06T11:42:22.450 回答
0

It also doesn't generate files when use_controller: true is on if you're using SASS to compile SCSS but ruby or the ruby gem sass not installed.

于 2014-12-23T21:45:59.870 回答
0

我有同样的问题,我只需要安装java

sudo apt-get install default-jre

您还可以查看输出的开头,这可能会有所帮助:

app/console assetic:dump > outfile 2>&1
于 2014-05-09T14:45:38.723 回答
0

我终于找到了解决方案!我在这个问题上工作了几个小时!你写了:

'@FooBundle/Resources/public/css/main.css' filter='cssrewrite'

但是“cssrewrite”过滤器不接受@FooBundle 语法!你所要做的:

php app/console assets:install

Symfony 将创建:

web/bundles/yourbundle/css/main.css

现在,在您的树枝模板中,替换:

'@FooBundle/Resources/public/css/main.css' filter='cssrewrite'

和:

'bundles/yourbundle/css/main.css' filter='cssrewrite'

希望它会帮助别人!(它是在 Symfony 文档中编写的.. ^^)

于 2019-06-03T18:40:51.920 回答
0

我有一个与此非常相似的错误。突然,资产停止工作。我唯一添加的是FOSRestBundle。也许您也在使用其余捆绑包。

这是我的解决方案:

fos_rest:
    routing_loader:
        default_format: json

    param_fetcher_listener: true
    body_listener: true

    format_listener:
        rules:
            # render "/api" requests as json
            - { path: ^/api, priorities: [ json ], fallback_format: json, prefer_extension: true }
            # default, fallback rendering twig templates
            - { path: ^/, priorities: ['html', 'application/javascript', 'text/css', '*/*'], fallback_format: html, prefer_extension: true }

我改为priorities: ['html', '*/*']现在priorities: ['html', 'application/javascript', 'text/css', '*/*']一切正常。

于 2016-08-01T12:34:20.337 回答