- Начало
- Основы
- Работа с формами
- Работа с БД
- Кэширование
- Расширение Yii
- Тестирование
- Специальные темы
- Автоматическая генерация кода
- Красивые адреса URL
- Аутентификация и авторизация
- Темы оформления и скины
- Журналирование
- Обработка ошибок
- Веб-сервисы
- Интернационализация (I18N)
- Альтернативный язык шаблонов
- Консольные приложения
- Безопасность
- Улучшение производительности
- Генерация кода при помощи консоли (устаревшее)
Представление
Представление — это 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) — это специальное представление для декорирования других представлений. Макет обычно содержит части пользовательского интерфейса, часто используемые другими представлениями. Например, макет может содержать верхнюю и нижнюю части страницы, заключая между ними содержание другого представления.
…здесь верхняя часть… <?php echo $content; …здесь нижняя…
Здесь $content хранит результаты рендеринга представления основного содержания.
Макет применяется неявно при вызове метода render().
По умолчанию, в качестве макета используется представление protected/views/layouts/main.php.
Это можно изменить путем установки значений CWebApplication::layout или CController::layout.
Для рендеринга представления без применения макета необходимо вызвать renderPartial().
Виджет
Виджет (widget)- это экземпляр класса CWidget или производного от него. Это компонент, применяемый в основном с целью оформления. Виджеты обычно встраивают в скрипт представления для генерации некоторой комплексной самодостаточной части пользовательского интерфейса. К примеру, виджет календаря может быть использован для рендеринга комплексного интерфейса календаря. Виджеты служат цели повторного использования кода пользовательского интерфейса.
Для использования виджета необходимо выполнить в коде:
$this->beginWidget('path.to.WidgetClass'); …некое содержимое, которое может быть использовано виджетом… <?php $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() { // этот метод будет вызван методом CController::beginWidget() } public function run() { // этот метод будет вызван методом CController::endWidget() } }
Как и у контроллера, у виджета может быть собственное представление.
По умолчанию, файлы представлений виджета находятся в поддиректории
views директории, содержащей файл класса виджета. Эти представления можно рендерить
при помощи вызова CWidget::render(), точно так же, как и в случае с контроллером.
Единственная разница состоит в том, что для представления виджета не используются макеты.
Также, $this в отображении указывает на экземпляр виджета, а не на экземпляр
контроллера.
Системные представления
Системные представления (system view) относятся к представлениям, используемым Yii для отображения ошибок и информации лога. Например, когда пользователь запрашивает несуществующий контроллер или действие, Yii сгенерирует исключение, раскрывающее суть ошибки. Такое исключение будет отображено с помощью системного представления.
Именование системных представлений подчиняется некоторым правилам.
Имена типа errorXXX относятся к представлениям, служащим для
отображения CHttpException с кодом ошибки XXX.
Например, если исключение CHttpException сгенерировано с кодом ошибки 404,
будет использовано представление error404.
Yii предоставляет стандартный набор системных представлений, расположенных в framework/views.
Их можно видоизменить путем создания файлов представлений с теми же названиям в директории protected/views/system.

