@AlikDex

Глобальная переменная в yii2?

В общем смотрите. Есть layout, типа main. Стандартный такой. С колонкой категории. Эти категории выводятся виджетом. Могоуровневые. В каждой категории есть список товаров. Суть в чем. Заходим мы на сайт, и получаем список товаров каких-то, они не устраивают конечно же, идем в категорию искать нужный. Вот. В это время обработку шараханий по категориям осуществляет контроллер CategoryController.php, например. Также есть правило для роутинга:
'<category:\w+>' => 'category/index',
Итак, зашли мы значит в категорию какую-то, котроллер вызвался, экшен вызвался, входящий параметр конечно же получился:
public function actionIndex($category = null)
{
    //....
}

В это время, виджет получает свою переменную, полученную из параметра экшена:
echo \frontend\widgets\Categories::widget([
    'category' => isset(Yii::$app->controller->actionParams['category']) ? Yii::$app->controller->actionParams['category'] : null,
]);

Все отлично, замечательно, работает!

Подбираемся к вопросу. =)
Как мы помним, у нас еще остались товары, у которых есть своя категория! Итак. Шарились мы шарились, нашли нужный нам товар в категории iphone например. Зашли на страницу, и вот тут у нас проблема. Категории для виджета из урла больше не получить, но она есть в товаре. Как передать эту категорию в виджет? Чтобы у товара высветилась активная категория. Решение в лоб:
Yii::$app->controller->actionParams['category'] = $model->category->slug;

Т.е. прямо варварски вписываем переменную в экшен параметры. Вариант второй - хранить где-то глобальную переменную. Сессии конечно можно, но тоже кажись не очень вариант. Есть еще идеи?
  • Вопрос задан
  • 1688 просмотров
Решения вопроса 1
bitver
@bitver
В контроллере:
$this->view->params
Прям во вьюшке:
$this->params

Посмотрите как работают стандартные хлебные крошки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@springimport
Можно сделать сервис которым будет управлять контроллер. В нормальном случае будет задавать параметр с url, в других - по-другому.
Так же можно использовать сессию.

P.S. Или пишите на английском, или не делайте ошибок.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы