Доступ к данным из видов
Данные можно передавать в вид явно или подгружать их динамически, обращаясь к контексту из вида.
Передавая данные через второй параметр методов рендеринга вида, вы явно передаете данные в вид. Данные должны быть представлены как обычный массив: ключ-значение. При рендеринге вида, php вызывает встроенную функцию PHP extract()
на переданном массиве, чтобы переменные из массива "распаковались" в переменные вида. Например, следующий код в контроллере передаст две переменные виду report
: $foo = 1
и $bar = 2
.
echo $this->render('report', [
'foo' => 1,
'bar' => 2,
]);
Другой подход, подход контекстного доступа, извлекает данные из [[yii\base\View|компонента вида]] или других объектов, доступных в виде (например через глобальный контейнер Yii::$app
). Внутри вида вы можете вызывать объект контроллера таким образом: $this->context
(см пример снизу), и, таким образом, получить доступ к его свойствам и методам, например, как указано в примере, вы можете получить ID контроллера:
ID контроллера: <?= $this->context->id ?>
Явная передача данных в вид обычно более предпочтительна, т.к. она делает виды независимыми от контекста. Однако, у нее есть недостаток - необходимость каждый раз вручную строить массив данных, что может быть довольно утомительно и привести к ошибкам, если вид рендерится в разных местах.