Создаю виджет, с использованием Pjax, с помощью которого можно пошагово забронировать номер в отеле. На первом шаге выбирается отель, на втором тип комнаты, на третьем остальные дополнительные опции. После каждого шага данные отправляются на контроллер (frontend/controllers/PjaxController) и возвращается измененная модель для виджета. Проблема в том, что при таком подходе приходится каждый раз генерировать данные, которые используются на странице, на которой отображается виджет. Пример:
Код: Выделить всё
//Файл frontend/controllers/SiteController
public function actionIndex()
{
...
$news = News::getNews();
$slider = Slider::getAll();
return $this->render('/site/index', [
'news' => $news,
'slider' => $slider,
...
]);
}
//Файл frontend/controllers/PjaxController
public function actionHotel()
{
...
$news = News::getNews();
$slider = Slider::getAll();
return $this->render('/site/index', [
'news' => $news,
'slider' => $slider,
...
...
]);
}
// Файл common/widgets/ReservationWidget.php
public function run()
{
...
return $this->render('reservation-view', [
'model' => $this->model,
]);
}
Как видно, на странице site/index, на которой вызывается виджет, используются некоторые данные, такие как $news, $slider и другие. И каждый раз в контроллере в котором происходят какие-либо действия, связаные с виджетом (PjaxController), мне нужно генерировать такие же $news и $slider, иначе на вьюхе произойдёт ошибка типа "Unknown $news ...", т.к. по сути перерисовывается вся страница. Таким образом контроллер-обработчик виджета тесно связан с view файлом, на котором находится этот виджет, т.к. в нём постоянно генерируются данные из этой вьюхи и рендер данной вьюхи. Есть ли возможность рендерить и перерисовывать только виджет из такого контроллера-обработчика?