Динамические Комплекты Ресурсов
Поскольку комплект ресурсов это обычный PHP класс, он может содержать дополнительную логику, связанную с ним, и может корректировать свои внутренние параметры динамически. Например, вы можете использовать сложную JavaScript библиотеку, которая предоставляет интернационализацию через отдельные исходные файлы: по одному на каждый поддерживаемый язык. Таким образом, вам нужно добавить определенный '.js' файл на вашу страницу, чтобы применить перевод для библиотеки. Этого можно достичь, переопределив метод [[yii\web\AssetBundle::init()]]:
namespace app\assets;
use yii\web\AssetBundle;
use Yii;
class SophisticatedAssetBundle extends AssetBundle
{
public $sourcePath = '/path/to/sophisticated/src';
public $js = [
'sophisticated.js' // file, which is always used
];
public function init()
{
parent::init();
$this->js[] = 'i18n/' . Yii::$app->language . '.js'; // dynamic file added
}
}
Конкретный комплект ресурсов может быть также изменен через его экземпляр, возвращенный методом [[yii\web\AssetBundle::register()]]. Например:
use app\assets\SophisticatedAssetBundle;
use Yii;
$bundle = SophisticatedAssetBundle::register(Yii::$app->view);
$bundle->js[] = 'i18n/' . Yii::$app->language . '.js'; // dynamic file added
Замечание: несмотря на то что динамическая корректировка комплекта ресурсов поддерживается, ее использование - это плохая практика, которая может привести к неожиданным побочных эффектам, и которой следует избегать.