Представление — это PHP-скрипт, состоящий преимущественно из элементов пользовательского интерфейса. Он может включать выражения PHP, однако рекомендуется, чтобы эти выражения не изменяли данные и оставались относительно простыми. Следуя концепции разделения логики и представления, большая часть кода логики должна быть помещена в контроллер или модель, а не в скрипт представления.
У представления есть имя, которое используется, чтобы идентифицировать файл
скрипта представления в процессе рендеринга. Имя представления должно совпадать
с названием файла представления. К примеру, для представления edit
соответствующий файл скрипта должен называться edit.php
. Чтобы отобразить
представление, необходимо вызвать метод CController::render(), указав имя
представления. При этом метод попытается найти соответствующий файл в директории
protected/views/ControllerID
.
Внутри скрипта представления экземпляр контроллера доступен через $this
.
Таким образом, мы можем обратиться к свойству контроллера из кода представления:
$this->propertyName
.
Кроме того, мы можем использовать следующий способ для передачи данных представлению:
$this->render('edit', array(
'var1'=>$value1,
'var2'=>$value2,
));
В приведённом коде метод render() преобразует второй параметр —
массив — в переменные. Как результат, внутри представления будут доступны
локальные переменные $var1
и $var2
.
Макет (layout) — это специальное представление для декорирования других представлений. Макет обычно содержит части пользовательского интерфейса, общие для нескольких представлений. Например, макет может содержать верхнюю и нижнюю части страницы, заключая между ними содержание другого представления:
…здесь верхняя часть… echo $content; …здесь нижняя…
Здесь $content
хранит результат рендеринга представления.
Макет применяется неявно при вызове метода render().
По умолчанию в качестве макета используется представление
protected/views/layouts/main.php
. Его можно изменить путём установки значений
CWebApplication::layout или CController::layout. Для рендеринга представления
без применения макета необходимо вызвать renderPartial().
Виджет (widget) — это экземпляр класса CWidget или унаследованного от него. Это компонент, применяемый, в основном, с целью оформления. Виджеты обычно встраиваются в представления для формирования некоторой сложной, но в то же время самостоятельной части пользовательского интерфейса. К примеру, виджет календаря может быть использован для рендеринга сложного интерфейса календаря. Виджеты позволяют повторно использовать код пользовательского интерфейса.
Для подключения виджета необходимо выполнить в коде:
$this->beginWidget('path.to.WidgetClass'); …некое содержимое, которое может быть использовано виджетом… $this->endWidget();
или
$this->widget('path.to.WidgetClass');
Последний вариант используется, когда виджет не имеет внутреннего содержимого.
Изменить поведение виджета можно путём установки начальных значений его свойств при вызове CBaseController::beginWidget или CBaseController::widget. Например, при использовании виджета CMaskedTextField можно указать используемую маску, передав массив начальных значений свойств как показано ниже, где ключи массива являются именами свойств, а значения — начальными значениями соответствующих им свойств виджета:
$this->widget('CMaskedTextField',array( 'mask'=>'99/99/9999' ));
Чтобы создать новый виджет, необходимо расширить класс CWidget и переопределить его методы init() и run():
class MyWidget extends CWidget
{
public function init()
{
// этот метод будет вызван внутри CBaseController::beginWidget()
}
public function run()
{
// этот метод будет вызван внутри CBaseController::endWidget()
}
}
Как и у контроллера, у виджета может быть собственное представление.
По умолчанию файлы представлений виджета находятся в поддиректории
views
директории, содержащей файл класса виджета. Эти представления можно рендерить
при помощи вызова CWidget::render() точно так же, как и в случае с контроллером.
Единственное отличие состоит в том, что для представления виджета не используются макеты.
Также следует отметить, что $this
в представлении указывает на экземпляр виджета, а не на экземпляр
контроллера.
Подсказка: свойство CWidgetFactory::widgets может быть использовано для настройки умолчаний для отдельных виджетов во всём приложении. Подробнее об этом можно прочитать в разделе «Темы оформления, глобальная настройка виджетов».
Системные представления относятся к представлениям, используемым Yii для отображения ошибок и информации лога. Например, когда пользователь запрашивает несуществующий контроллер или действие, Yii генерирует исключение, раскрывающее суть ошибки. Такое исключение будет отображено с помощью системного представления.
Именование системных представлений подчиняется некоторым правилам.
Имена типа errorXXX
относятся к представлениям, служащим для
отображения исключений CHttpException с кодом ошибки XXX
.
Например, если исключение CHttpException сгенерировано с кодом ошибки 404,
будет использовано представление error404
.
Yii предоставляет стандартный набор системных представлений, расположенных в
framework/views
. Их можно изменить, создав файлы представлений с
теми же названиями в директории protected/views/system
.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.