Есть виджет, я зарегистрировал его js, но мне нужно в этот js (который я подключил через asset) включить переменные из PHP (настроек виджита) как это сделать что почитать?
Дмитрий Ким я повторю, этот код отработает позже чем Asset::register - в котором скрипт для котторого и нужны переменные $this->view->registerJs('
var a = a"');//позже
WidgAsset::register($this->view);//чем это он еще не увидит переменную А
web-quest3, так вы в самом виджете и должны это прописать:
class MyWidget extends Widget {
public $a;
public function run(){
MyWidgetAsset::register($this->view);
$this->view->registerJs(sprintf(" var a = '%s' ", $a));
}
}
А в том месте где нужно вставить сам виджет: MyWidget::widget(['a' => 'A']);
А если у вас в MyWidgetAsset подключается JS-файл с настройками, то вынесите сами настройки в код виджета, чтобы не дублировать.
web-quest3, так в чем тогда вопрос? Вынесите настройки, которые хотите задавать из виджета в сам виджет, а подключайте только js-файлы, независящие ни от чего.
OKyJIucT я повторю, этот код отработает позже чем Asset::register - в котором скрипт для котторого и нужны переменные
$this->view->registerJs('
var a = a"');//позже
WidgAsset::register($this->view);//чем это он еще не увидит переменную А
web-quest3, зачем весь файл, одну какую то функцию добавьте, в которой используется вставка значения. И потом эта функция будет вызывать другие функции из asset. например
<?php
$param = 111;
$this->registerJs("
var a = {$param};
some_func(a);
");
web-quest3, скриншот, на что конкретно ругается, где вы его вставляли. Свой пример проверил, перед тем, как вам его предложить, у меня в консоль все вывелось. Да и в целом, предложил саму идею, а не точную реализацию, которая отработает как вам надо.