Почему метод init виджета вызывается не только при инициализации?
Добавлено: 2019.06.27, 19:58
Есть виджет, в котором отображается `GridView`, обёрнутый в Pjax. У грида есть пагинация. В виджете написано свойство и заполняется в методе `init` и передается в методе `run` в темплейт:
Представление:
В итоге, при клике на пагинации в гриде я вижу не только изменения в таблице, но и меняющееся значение в переменной `$myUid`.
Вопрос: Почему? Разве `init` не должен нести только функцию инициализации и больше не вызываться никогда вообще? Я представлял, что в таком случае должен работать только метод `run`. Почему так происходит?
Дополнительный вопрос: Есть ли в виджете такой метод, который действительно вызывается только раз? Который не дергается при ajax запросах?
Код: Выделить всё
public $myUid;
public function init() {
parent::init();
$this->myUid = uniqid();
}
public function run() {
// Много кода
return $this->render('widget-template', [
'myUid' => $this->myUid,
// Другие переменные
]);
}
Код: Выделить всё
<?php Pjax::begin(['id' => 'widget-grid']); ?>
<?= $myUid .'<br>'; ?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => $gridColumns,
]); ?>
<?php Pjax::end(); ?>
Вопрос: Почему? Разве `init` не должен нести только функцию инициализации и больше не вызываться никогда вообще? Я представлял, что в таком случае должен работать только метод `run`. Почему так происходит?
Дополнительный вопрос: Есть ли в виджете такой метод, который действительно вызывается только раз? Который не дергается при ajax запросах?