Сначала база - файл представления (вида) должен располагаться по следующей схеме: views/ControllerID/ViewName.php
Пример. Файл контроллера:
class KslController extends Controller{
    public function actionHello($message = 'Приветствую!'){    
        return $this->render('hello',    
        array('message'=> $message)
        ); 
    }
}
Согласно примера- в папке views нужно создать папку ksl, а в ней файл вида - hello.php
actionHello() - действие контроллера;
render() - базовый метод контроллера вызывающий файл вида (hello) и передающий в него указанные переменные.
Это самый простой и популярный способ передачи параметров в файл вида, в котором вывести значение можно обычным способом:
<p><?=$message ?></p>

Но! При передаче параметров методом render в вид, их нельзя будет получить в шаблоне main.php (находится в папке layouts).




Как передать параметры из контроллера в шаблон?!!

1.Из контроллера можно напрямую записать параметр в вид (View Object).

Для этого нужно в действии контроллера до метода render поместить код:
Yii::$app->view->params['test'] = 'готово' ;
Т.к. для файла шаблона вызывающий его объект ($this) как и для файла вида - View Object, значение можно получить таким образом:
$this->params['test'];


2. В шаблоне можно получить доступ к контроллеру с помощью $this->context

Поэтому, можно в классе контроллера объявить публичную переменную, например:
public $sidebar;
а в действиях контроллера присваивать ей нужное значение, например:
$this->sidebar = true;
Теперь значение можно получить в шаблоне (и в виде тоже):
$this->context->sidebar;

Есть еще другие варианты, иногда можно использовать глобальные параметры, но обычно этого достаточно.


  • $this в шаблонах ссылается на ВИД.
  • $this->context в шаблонах и видах ссылается на контроллер (или другой родительский объект).
  • $this->renderPartial – вызов вида для действия контроллера не используя общий шаблон
  • $html = $this->renderPartial – сохранение вида в переменную вместо ее вывода