Yii использует следующий рендерер представления (в CBaseController):
public function renderInternal($_viewFile_,$_data_=null,$_return_=false)
{
// we use special variable names here to avoid conflict when extracting data
if(is_array($_data_))
extract($_data_,EXTR_PREFIX_SAME,'data');
else
$data=$_data_;
if($_return_)
{
ob_start();
ob_implicit_flush(false);
require($_viewFile_);
return ob_get_clean();
}
else
require($_viewFile_);
}
Как вы можете видеть, ваше представление вызывается в контексте контроллера и поэтому имеет доступ к $ this (controller).Хотя считается плохой практикой передавать представление данных с помощью контроллера, это полезно для анализа данных между сквозными представлениями и доступа к другим функциям (таким как виджеты).
В вашем примере кода могут быть использованы хлебные крошки свойства контроллерамодифицируется видом и читается макетом, даже если вид находится внутри макета.Это работает, потому что представление отображается и затем вставляется в макет.Также стоит отметить, что использование этого является единственным способом передачи данных в макеты из контроллера.
Хотя документация yii великолепна, нет ничего лучше, чем открыть исходный код и посмотреть, как он работает.Ведь в этом весь смысл открытого кода: D