2011-11-24 3 views
16

OLD QUESTIONは、symfony2にCSS、JSファイルをPHP経由で直接読み込ませる方法は?

私の開発環境は最速ではありません更新されたバージョンについては下記を参照してください。私は、PHP要求あたり約500msかかる。リソースファイルのそれぞれはsymfonyの内部コントローラを介して要求されているので、Symfony2のリソースファイルに問題になり始めています:

http://localhost/myproj/app_dev.php/js/bb8690a_part_4_myJavaScriptFile_2.js

見ることができるように、ファイルはsymfonyフレームワークによってロードされています直接ではありません。私はロードするために20以上のファイルを持っているので、500ミリ秒のページをロードすると非常に遅くなります。ファイルを直接ロードしたいのですが、どうすればよいか分かりません。

これはconfig.ymlの一部です:

# Assetic Configuration 
assetic: 
    debug:   %kernel.debug% 
    use_controller: false 
    # java: /usr/bin/java 
    filters: 
     cssrewrite: ~ 

私はfalseからuse_controllerを設定すると、それを行うだろうと思ったが、いや。

これらのリソースの読み込みを直接処理する方法はありますか?

UPDATE:私はDEVと一般のconfigsの両方のためにfalseuse_controllerを設定している

http://localhost/myproj/_controller/js/bb8690a_part_4_myJavaScriptFile_2.js

これが今使用しようとするURLです。 URLの_controller部分を削除するにはどうすればよいですか?

編集:キャッシュをクリアしてassetic:dumpを実行し、use_controllerfalseとした場合、リロード時にCannot load resource "."と表示されます。 1ページの読み込みに一時的にuse_controllerを有効にしない限り、この問題を回避することはできません。その後、私はそれを無効にしてリロードし、今はそれが_controllerを含む無効なURLから要求します。

これはまたprodで動作するようですが、devでは動作しません。奇妙な。

テンプレートコード:

{% stylesheets filter="cssrewrite" 
      'bundles/outotecofil/css/reset.css' 
      'bundles/outotecofil/css/*' 

      output='css/dist/dist.css' 
     %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
     {% endstylesheets %} 

     {% javascripts 
      '@OutotecCommonBundle/Resources/public/js/jquery-1.6.2.min.js' 
      '@OutotecCommonBundle/Resources/public/js/jquery-ui-1.8.16.custom.min.js' 
      '@OutotecCommonBundle/Resources/public/js/chosen.jquery.min.js' 
      '@OutotecCommonBundle/Resources/public/js/widget/*' 

      '@OutotecOFILBundle/Resources/public/js/OFILDependencyManager.js' 
      '@OutotecOFILBundle/Resources/public/js/widget/*' 
      '@OutotecOFILBundle/Resources/public/js/plant-scope.js' 

      output='js/dist/dist.js' 
     %} 
     <script src="{{ asset_url }}"></script> 
     {% endjavascripts %} 

非常に明確にする:app_dev.phpことなく(すなわちPRODモード)は、作品。私は最初にuse_controllerを1つの要求に有効にしない限り、それを無効にして再ロードすることができますが、URLには_controller/が含まれていますが、devにはありません。

+0

アセットを呼び出すテンプレートにコードを表示してください。 – Sgoettschkes

+0

@Boo質問を更新しました。 – Tower

+0

@Towerは、これを達成するための正確な手順を書き留めていただけますか? – danidacar

答えて

20

use_controllerがfalseの場合、routing_dev.ymlのコードのこの部分を削除するようにしてください:

_assetic: 
    resource: . 
    type:  assetic 
6

symfonyのドキュメントを常に見て開始する最初の場所である:prod環境でHow to Use Assetic for Asset Management

を、あなたのJSとCSSファイルは、単一のタグそれぞれで表されます。言い換えれば、代わりにあなたがあなたの元に含めている各JavaScriptのファイルを見て、あなたはおそらくちょうどこのようなものが表示されます:

<script src="/app_dev.php/js/abcd123.js"></script> 

はまた、そのファイルは実際には存在しません。また、動的でレンダリングされますsymfony(アセットファイルは開発環境にあります)。これは、実稼働環境でSymfonyがこれらのファイルを動的に生成できるようにすることにすぎません。

代わりに、あなたは(したがってデプロイするたびにと)prod環境でアプリケーションを使用するたびに、次のタスクを実行する必要があります。これは、物理的にあなたの各ファイルを生成して書き込みます

php app/console assetic:dump --env=prod --no-debug 

を必要(例:/js/abcd123.js)。アセットを更新する場合は、このファイルを再生成するために再度実行する必要があります。

+0

さて、私はさらにそれを得ました、今は 'http:// localhost/myproj/_controller/js/dist/dist_jquery-1.6.2.min_1.js'からロードしようとしています。 '_controller'がなければ動作します。なぜそれを置いたのですか? – Tower

+0

user_controllerを有効にしますか? – dlondero

+0

どのようなuser_controller?それは何ですか? – Tower

1

私は設定作業、同じ問題を抱えているのである:routing_dev.ymlから コメントアウト:

_assetic: 
resource: . 
type:  assetic 

use_controllerをfalseに設定します。 これを実行した後、私はassetic:dumpを使用して作業ページを見ることができます。

5

あなたがassetic:dumpを使用する場合は、あなたがcache:clear -e dev

」を持っている...あなたはキャッシュ実行する場合:本番キャッシュに明確にし、それが上のデバッグモードでキャッシュを暖め、あなたがその後の資産をダンプしよう。奇妙なことが起こるかもしれない」

私はここでそれを見つけた:http://sftuts.com/using-assetic-in-symfony2-for-css-compression(4段落)

+0

sftutsの投稿は、あなたのプロダクション環境で何をすべきかを話しているだけであり、あなたがdevで行うことに影響を与えてはならないアドバイスです。何か不足していますか? – Sam

5

documentation

からコントローラを使用しないようにDEV設定を変更します。

# app/config/config_dev.yml 
assetic: 
    use_controller: false 

# app/config/routing_dev.yml 
_assetic: 
    resource: . 
    type:  assetic 

が自動的にあなたのCSS /以下のファイルあなたは修正を持っているすべての時間をダンプする副作用を避けるために、routing_dev.ymlにルートを削除します。

php app/console assetic:dump --watch