25

私はcssを管理するためにsymfony2でasseticを使用しようとしています。リンクは正常に生成されます。ただし、ファイルは生成されません。

これが私の設定です:

Layout.html.twig

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

Config.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でasseticconfigを編集するだけです。

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/

出力は、 asseticの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

私は同じ問題を抱えていました、私はちょうどjavaをインストールする必要がありました

sudo apt-get install default-jre

また、出力の開始を確認することもできます。これは次の場合に役立ちます。

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

また、use_controller: trueSASSを使用してSCSSをコンパイルしているがruby、ruby gemsassがインストールされていない場合は、がオンのときにファイルを生成しません。

于 2014-12-23T21:45:59.870 に答える
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 に答える
0

私はついに解決策を見つけました!! 私はこの問題に何時間も取り組みました!あなたが書いた:

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

しかし、「cssrewrite」フィルターは@FooBundle構文を受け入れません!あなたはしなければならない:

php app/console assets:install

symfonyは以下を作成します:

web/bundles/yourbundle/css/main.css

次に、Twigテンプレートで、次を置き換えます。

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

と:

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

それが他の誰かを助けることになることを願っています!(Symfonyのドキュメントに書かれています。^^)

于 2019-06-03T18:40:51.920 に答える