はい、Yii はこれをサポートしています。実際、これは私がいくつかのWebサイトを構成した方法です。
(もちろん、これはすべてのサイトが同じサーバー上にあることを前提としています。しかし、Evan はこれを持っているようです。これはサーバー間では機能しません。)
まず、コードを Web ルートからドキュメント ルートに移動する必要があります。ここを参照してください。
次に、Yii AssetsBase を使用する必要があります。あちらこちらでご覧ください。アセット管理は構成するのが難しいことがわかりました (ただし、操作は簡単です)。これは私が最終的に得たものです:
components/Controller.php に以下を含めます。
/**
* @var registers which js, css, images have been published
* See: http://www.yiiframework.com/wiki/311/assetmanager-clearing-browser-s-cache-on-site- update/
*/
private $_assetsBase;
public function getAssetsBase()
{
if ($this->_assetsBase === null) {
Yii::app()->assetManager->newDirMode = 0755;
Yii::app()->assetManager->newFileMode = 0644;
$this->_assetsBase = Yii::app()->assetManager->publish(
Yii::getPathOfAlias('application.assets'),
false,
-1,
defined('YII_DEBUG') && YII_DEBUG
);
}
return $this->_assetsBase;
}
上記は、JS、CSS、および画像が次のように配置されていることを前提としています。
protected/assets/js/mobiscroll-2.3.custom.min.js
protected/assets/css/mobiscroll-2.3.custom.min.css
protected/assets/img/einstein.png
次に、ビューで次のようにアセットを呼び出します。
<?php
$cs->registerScriptFile($this->assetsBase.'/js/mobiscroll-2.3.1/js/mobiscroll-2.3.custom.min.js');
$cs->registerCssFile($this->assetsBase.'/js/mobiscroll-2.3.1/css/mobiscroll-2.3.custom.min.css');
?>
<img src="<?php echo $this->assetsBase ?>/img/einstein.png">
最後に、JS または CSS に変更を加えた後、すべてのユーザーのブラウザーでキャッシュを強制的に更新する必要があります。これを行うには、(元の) アセット ディレクトリに触れます。これにより、Yii は (公開された) アセット ディレクトリを再ハッシュするようになります。その後、すべてのユーザーのブラウザーで JS と CSS が更新されます。次のようにします。
$command = 'touch /path/to/your/website/protected/assets';
exec ( $command.' 2>&1', $output , $result );
if ($result === 0) {
$message = 'Assets have been pointed; a new directory should now be hashed';
} else {
$message = 'Looks like something went wrong. Assets not pointed?';
} // END if