2013-03-25 8 views
10

私のウェブサイトは別々のモジュールに分かれています。すべてのモジュールには、jsファイルの場合は/protected/modules/my_module/assets/cssまたはjsに固有のCSSまたはjsファイルがあります。私の資産を使用するページを最初に使用するとき、Yiis資産マネージャーはフォルダを作成します。 残念ながら、ファイル内でsthを変更すると、Yiiは自分のcssファイルまたはjsファイルをリロードしません。 /projects/assetsフォルダを手動で削除する必要があります。あなたがアプリを開発しているときは本当に面倒です。Yiiにリクエストごとにモジュールアセットを再ロードさせる方法はありますか?

Yiiにリクエストごとに資産を再読み込みさせる方法はありますか? components/Controller.php

答えて

20

以下を追加します(または既存のbeforeActionを調整):これは、任意のアクションが開始される前に、アプリケーションがデバッグモードであるかどうかを確認し、あればということ、それを何

protected function beforeAction($action){ 
    if(defined('YII_DEBUG') && YII_DEBUG){ 
     Yii::app()->assetManager->forceCopy = true; 
    } 
    return parent::beforeAction($action); 
} 

したがって、すべてのページの読み込み時にすべてのアセットを強制的に再コピーするようにアセットマネージャを設定します。

参照:http://www.yiiframework.com/doc/api/1.1/CAssetManager#forceCopy-detail

私はこれをテストしたが、私はそれが正常に動作する必要があります信じているドキュメントをもとにしていません。

注:このコードをbeforeActionに配置することは、配置する場所の一例に過ぎません。 publish()を呼び出す前にforceCopyプロパティをtrueに設定し、beforeActionに配置するだけでその目標を達成する必要があります。

+2

ヒント: '定義された(YII_DEBUG)'必要ありません - それは、常に 'true'をもしくは' false'のいずれかとして定義されます。 –

3

Anが、代わりソリューションは、このようなあなたのモジュールの資産を公開することである。

Yii::app()->assetManager->publish($path, false, -1, YII_DEBUG); 

第四パラメータは、彼らがどこにあっても、すでに発表され、あなたの資産のコピーを強制します。 詳細は、publish()のマニュアルを参照してください。

2

すべてのリクエストに対してアセットを再パブリッシュすると、潜在的に多くのリソースが必要になり、開発には不便です。開発のために

  • 、それは CClientScriptのlinkAssets機能を使用するには、はるかに簡単です。アセットはシンボリックリンクディレクトリとして公開され、 を再生成する必要はありません。参照:ステージング/生産のために http://www.yiiframework.com/doc/api/1.1/CAssetManager#linkAssets-detail

  • 、あなたは/フォルダあなたの更新ルーチン/スクリプトの 一部を資産をクリアにする必要があります。

何らかの理由で開発マシンでシンボリックリンクを使用できない場合は、他の解決策のいずれかに戻ってください(あまりありません)。

+0

非常に興味深い解決策です。私はそれを調べますが、それは非常に有望であり、確かにすべての要求を資産を公開するよりも速いようです。 – Joe

9

Yii2を使用している場合は、構成によってずっと簡単な解決策があります。

があなたの'config/web.php'に以下を追加します。

if (YII_ENV_DEV) { 
    // configuration adjustments for 'dev' environment 
    // ... 
    $config['components']['assetManager']['forceCopy'] = true; 
} 

これは、各実行時にすべてのフォルダをコピーするAssetManagerを強制します。configにYII 1では

+3

..または**コンポーネントの** 'forceCopy' => YII_DEBUG、 'at ** assetManager **セクションを追加するだけです – verybadbug

0

我々は持っている:

'components'=> [ 
... 
'assetManager' => array(
      'forceCopy' => YII_DEBUG, 
... 
) 
... 

] 
関連する問題