私は自分の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)ログを調べてみましたが、今のところ何もありません。
すべての助けをいただければ幸いです。
資産を扱う場合、2つのオプションがあります。コンピューターにアセットが物理的に表示されない理由は、オプション1を選択したためです。
つまり、開発環境で生成された各アセットパスはSymfonyによって動的に処理されます。したがって、Asseticは、コンピューター上に物理的に存在しないCSSおよびJavaScriptファイルへのパスを生成します。これは、ファイルを開いてコンテンツを提供する内部Symfonyコントローラーです。
利点:-アセットに加えられた変更はすぐに有効になります-これはSymfonyとしての開発モードで素晴らしいですファイルを動的に生成します
短所:-各アセットの動的レンダリングが遅すぎるため、これは本番モードでは不可能です-コンピューターからアセットに直接アクセスすることはできません(そのため、ファイルが見つかりません)-多数のフィルターなどを使用している場合は、非常に遅くなる可能性があります...
開発モードでこれを行うには、config_dev.ymlでasseticconfigを編集するだけです。
assetic:
use_controller: true
アセットを動的に処理したくない場合は、アセットを手動でダンプできます。つまり、実際にアセットをコンピューターに物理的に書き込むことができます。
利点:-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を使用する方法は?
これと非常によく似たエラーが発生しました。突然、資産が機能しなくなりました。私が追加したのは 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', '*/*']
そしてすべてが正常に動作するようになりました。
私は同じ問題を抱えていました、私はただJavaをインストールする必要がありました
Sudo apt-get install default-jre
出力の始まりを確認することもできます。これは次の場合に役立ちます。
app/console assetic:dump > outfile 2>&1
また、SASSを使用してSCSSをコンパイルしているが、Ruby
またはRuby gem sass
の場合、use_controller: true
がオンの場合、ファイルは生成されません。インストールされていない。
私はついに解決策を見つけました!!私はこの問題に何時間も取り組みました!あなたが書いた:
'@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のドキュメントに書かれています。^^)