Renderajax yii2 что это
Renderajax yii2 что это
Создание видов #
Совет: Переданные переменные могут быть перечислены в блоке комментария в начале скрипта, чтобы их смогли распознать IDE. К тому же, это хороший способ добавления документации в вид.
Безопасность #
При создании видов, которые генерируют HTML страницы, важно кодировать и/или фильтровать данные, которые приходят от пользователей перед тем как их показывать. В противном случае ваше приложение может стать жертвой атаки типа межсайтовый скриптинг
Чтобы показать обычный текст, сначала кодируйте его с помощью yii\helpers\Html::encode(). В примере ниже имя пользователя кодируется перед выводом:
Чтобы показать HTML содержимое, используйте yii\helpers\HtmlPurifier для того, чтобы отфильтровать потенциально опасное содержимое. В примере ниже содержимое поста фильтруется перед показом:
Tip: Несмотря на то, что HTMLPurifier отлично справляется с тем, чтобы сделать вывод безопасным, работает он довольно медленно. Если от приложения требуется высокая производительность, рассмотрите возможность кэширования отфильтрованного результата
Организация видов #
Как и для контроллеров, и моделей, для видов тоже есть определенные соглашения в их организации.
В контроллерах и виджетах вы можете изменить папки видов по умолчанию, переопределив метод yii\base\ViewContextInterface::getViewPath().
Рендеринг видов #
Вы можете рендерить виды в контроллерах, widgets, или из любого другого места, вызывая методы рендеринга видов. Методы вызываются приблизительно так, как это показано в примере ниже,
Рендеринг в контроллерах #
Внутри контроллеров можно вызывать следующие методы рендеринга видов:
Рендеринг в виджетах #
Внутри виджетов, вы можете вызывать следующие методы для рендеринга видов.
Рендеринг в видах #
Вы можете рендерить вид внутри другого вида используя методы, которые предоставляет компонент вида:
Рендеринг в других местах #
Именованные виды #
При рендеринге вида, вы можете указать нужный вид, используя как имя вида, так и путь к файлу/алиас. В большинстве случаев вы будете использовать первый вариант, т.к. он более нагляден и гибок. Мы называем виды, которые были вызваны с помощью сокращенного имени именованные виды.
Имя вида преобразуется в соответствующий ему путь файла в соответствии со следующими правилами:
Доступ к данным из видов #
Данные можно передавать в вид явно или подгружать их динамически, обращаясь к контексту из вида.
Передача данных между видами #
Компонент вида имеет свойство params, которое вы можете использовать для обмена данными между видами.
Например, в виде about вы можете указать текущий сегмент хлебных крошек с помощью следующего кода.
Затем, в шаблоне, который также является видом, вы можете отобразить хлебные крошки используя данные, переданные через params.
Шаблоны #
Создание шаблонов #
Большинство шаблонов вызывают методы, аналогично тому, как это сделано в примере выше, чтобы скрипты и тэги, зарегистрированные в других местах приложения могли быть правильно отображены в местах вызова (например, в шаблоне).
Доступ к данным в шаблонах #
Если вы хотите получить доступ к другим данным из шаблона, используйте метод явной передачи (он описан в секции Доступ к данным в видах настоящего документа). Если вы хотите передать данные из вида шаблону, вы можете использовать метод, описанный в передаче данных между видами.
Использование шаблонов #
Вы можете использовать разные шаблоны, конфигурируя yii\base\Application::layout или yii\base\Controller::layout. Первый переопределяет шаблон, который используется по умолчанию всеми контроллерами, а второй переопределяет шаблон в отдельном контроллере. Например, код внизу показывает, как можно сделать так, чтобы контроллер использовал шаблон @app/views/layouts/post.php при рендеринге вида. Другие контроллеры, если их свойство layout не переопределено, все еще будут использовать @app/views/layouts/main.php как шаблон.
Для контроллеров, принадлежащих модулю, вы также можете переопределять свойство модуля layout, чтобы использовать особый шаблон для этих контроллеров.
Поскольку свойство layout может быть сконфигурировано на разных уровнях приложения (контроллеры, модули, само приложение), Yii определяет какой шаблон использовать для контроллера в два этапа.
На первом этапе определяется значение шаблона и контекстный модуль.
На втором этапе определяется сам файл шаблона для рендеринга на основании значения layout и контекстного модуля. Значением layout может быть:
Вложенные шаблоны #
Иногда нужно вложить один шаблон в другой. Например, в разных разделах сайта используются разные шаблоны, но у всех этих шаблонов есть основная разметка, которая определяет HTML5 структуру страницы. Вы можете использовать вложенные шаблоны, вызывая beginContent() и endContent() в дочерних шаблонах таким образом:
В коде выше дочерний шаблон заключается в beginContent() и endContent(). Параметр, передаваемый в метод beginContent() определяет родительский шаблон. Это может быть как путь к файлу, так и алиас.
Используя подход выше, вы можете вкладывать шаблоны друг в друга в несколько уровней.
Использование блоков #
Блоки позволяют «записывать» контент в одном месте, а показывать в другом. Они часто используются совместно с шаблонами. Например, вы определяете (записываете) блок в виде и отображаете его в шаблоне.
В примере ниже показано, как можно использовать блоки, определенные в виде, чтобы динамически изменять фрагменты шаблона.
Сначала, в виде, вы записываете один или несколько блоков:
Затем, в шаблоне, рендерите блоки если они есть, или показываете контент по умолчанию, если блок не определен.
Использование компонентов вида #
Компоненты вида дают много возможностей. Несмотря на то, что существует возможность создавать индивидуальные экземпляры yii\base\View или дочерних классов, в большинстве случаев используется сам компонент view приложения. Вы можете сконфигурировать компонент в конфигурации приложения таким образом:
Компоненты вида предоставляют широкие возможности по работе с видами, они описаны в отдельных секциях документации:
Также удобно пользоваться мелкими, но удобными фичами при разработке веб страниц, которые приведены ниже.
Установка заголовков страниц #
У каждой страницы должен быть заголовок. Обычно заголовок выводится в шаблоне. Однако на практике заголовок часто определяется в видах, а не в шаблонах. Чтобы передать заголовок из вида в шаблон, используется свойство title.
В виде можно задать заголовок таким образом:
В шаблоне заголовок выводится следующим образом, (убедитесь, что в у вас соответствующий код):
Регистрация мета-тэгов #
На веб страницах обычно есть мета-тэги, которые часто используются различными сервисами. Как и заголовки страниц, мета-тэги выводятся в и обычно генерируются в шаблонах.
Если вы хотите указать, какие мета-тэги генерировать в видах, вы можете вызвать метод yii\web\View::registerMetaTag() в виде так, как в примере ниже:
Этот код зарегистрирует мета тэг «keywords» в виде. Зарегистрированные мета тэги рендерятся после того, как закончен рендеринг шаблона. Они вставляются в то место, где в шаблоне вызван метод yii\web\View::head(). Результатом рендеринга мета тэгов является следующий код:
Обратите внимание, что при вызове метода yii\web\View::registerMetaTag() несколько раз мета тэги будут регистрироваться каждый раз без проверки на уникальность.
Чтобы убедиться, что зарегистрирован только один экземпляр одного типа мета тэгов, вы можете указать ключ мета тэга в качестве второго параметра при вызове метода. К примеру, следующий код регистрирует два мета тэга «description», однако отрендерен будет только второй.
Регистрация тэгов link #
Как и мета тэги, link тэги полезны во многих случаях, как, например, задание уникальной favicon, указание на RSS фид или указание OpenID сервера для авторизации. С link тэгами можно работать аналогично работе с мета тэгами, вызывая метод yii\web\View::registerLinkTag(). Например, вы можете зарегистрировать link тэг в виде таким образом:
Как и в случае с registerMetaTag(), вы можете указать ключ вторым параметром при вызове registerLinkTag() чтобы избежать дублирования link тэгов одного типа.
События в видах #
Компонент вида вызывает несколько событий во время рендеринга. Вы можете задавать обработчики для этих событий чтобы добавлять контент в вид или делать пост-обработку результатов рендеринга до того, как они будут отправлены конечным пользователям.
Например, следующий код вставляет дату в конец body страницы:
Рендеринг статических страниц #
Статическими страницами мы считаем страницы, которые содержат в основном статические данные и для формирования которых не нужно строить динамические данные в контроллерах.
Вы можете выводить статические страницы, сохраняя их в видах, а затем используя подобный код в контроллере:
Полезные советы #
Виды отвечают за представление данных моделей в формате, понятным конечным пользователям. В целом, виды
Чтобы сделать виды более управляемыми, избегайте создания видов, которые содержат слишком сложную логику или большое количество кода. Используйте следующие подходы для их упрощения:
Renderajax yii2 что это
Создание видов ¶
Совет: Переданные переменные могут быть перечислены в блоке комментария в начале скрипта, чтобы их смогли распознать IDE. К тому же, это хороший способ добавления документации в вид.
Безопасность ¶
При создании видов, которые генерируют HTML страницы, важно кодировать и/или фильтровать данные, которые приходят от пользователей перед тем как их показывать. В противном случае ваше приложение может стать жертвой атаки типа межсайтовый скриптинг
Чтобы показать обычный текст, сначала кодируйте его с помощью yii\helpers\Html::encode(). В примере ниже имя пользователя кодируется перед выводом:
Чтобы показать HTML содержимое, используйте yii\helpers\HtmlPurifier для того, чтобы отфильтровать потенциально опасное содержимое. В примере ниже содержимое поста фильтруется перед показом:
Подсказка: Несмотря на то, что HTMLPurifier отлично справляется с тем, чтобы сделать вывод безопасным, работает он довольно медленно. Если от приложения требуется высокая производительность, рассмотрите возможность кэширования отфильтрованного результата
Организация видов ¶
Как и для контроллеров, и моделей, для видов тоже есть определенные соглашения в их организации.
В контроллерах и виджетах вы можете изменить папки видов по умолчанию, переопределив метод yii\base\ViewContextInterface::getViewPath().
Рендеринг видов ¶
Вы можете рендерить виды в контроллерах, widgets, или из любого другого места, вызывая методы рендеринга видов. Методы вызываются приблизительно так, как это показано в примере ниже,
Рендеринг в контроллерах ¶
Внутри контроллеров можно вызывать следующие методы рендеринга видов:
Рендеринг в виджетах ¶
Внутри виджетов, вы можете вызывать следующие методы для рендеринга видов.
Рендеринг в видах ¶
Вы можете рендерить вид внутри другого вида используя методы, которые предоставляет компонент вида:
Рендеринг в других местах ¶
Именованные виды ¶
При рендеринге вида, вы можете указать нужный вид, используя как имя вида, так и путь к файлу/алиас. В большинстве случаев вы будете использовать первый вариант, т.к. он более нагляден и гибок. Мы называем виды, которые были вызваны с помощью сокращенного имени именованные виды.
Имя вида преобразуется в соответствующий ему путь файла в соответствии со следующими правилами:
Доступ к данным из видов ¶
Данные можно передавать в вид явно или подгружать их динамически, обращаясь к контексту из вида.
Передача данных между видами ¶
Компонент вида имеет свойство params, которое вы можете использовать для обмена данными между видами.
Например, в виде about вы можете указать текущий сегмент хлебных крошек с помощью следующего кода.
Затем, в шаблоне, который также является видом, вы можете отобразить хлебные крошки используя данные, переданные через params.
Шаблоны ¶
Создание шаблонов ¶
Большинство шаблонов вызывают методы, аналогично тому, как это сделано в примере выше, чтобы скрипты и тэги, зарегистрированные в других местах приложения могли быть правильно отображены в местах вызова (например, в шаблоне).
Доступ к данным в шаблонах ¶
Если вы хотите получить доступ к другим данным из шаблона, используйте метод явной передачи (он описан в секции Доступ к данным в видах настоящего документа). Если вы хотите передать данные из вида шаблону, вы можете использовать метод, описанный в передаче данных между видами.
Использование шаблонов ¶
Вы можете использовать разные шаблоны, конфигурируя yii\base\Application::$layout или yii\base\Controller::$layout. Первый переопределяет шаблон, который используется по умолчанию всеми контроллерами, а второй переопределяет шаблон в отдельном контроллере. Например, код внизу показывает, как можно сделать так, чтобы контроллер использовал шаблон @app/views/layouts/post.php при рендеринге вида. Другие контроллеры, если их свойство layout не переопределено, все еще будут использовать @app/views/layouts/main.php как шаблон.
Для контроллеров, принадлежащих модулю, вы также можете переопределять свойство модуля layout, чтобы использовать особый шаблон для этих контроллеров.
Поскольку свойство layout может быть сконфигурировано на разных уровнях приложения (контроллеры, модули, само приложение), Yii определяет какой шаблон использовать для контроллера в два этапа.
На первом этапе определяется значение шаблона и контекстный модуль.
На втором этапе определяется сам файл шаблона для рендеринга на основании значения layout и контекстного модуля. Значением layout может быть:
Вложенные шаблоны ¶
Иногда нужно вложить один шаблон в другой. Например, в разных разделах сайта используются разные шаблоны, но у всех этих шаблонов есть основная разметка, которая определяет HTML5 структуру страницы. Вы можете использовать вложенные шаблоны, вызывая beginContent() и endContent() в дочерних шаблонах таким образом:
В коде выше дочерний шаблон заключается в beginContent() и endContent(). Параметр, передаваемый в метод beginContent() определяет родительский шаблон. Это может быть как путь к файлу, так и алиас.
Используя подход выше, вы можете вкладывать шаблоны друг в друга в несколько уровней.
Использование блоков ¶
Блоки позволяют «записывать» контент в одном месте, а показывать в другом. Они часто используются совместно с шаблонами. Например, вы определяете (записываете) блок в виде и отображаете его в шаблоне.
В примере ниже показано, как можно использовать блоки, определенные в виде, чтобы динамически изменять фрагменты шаблона.
Сначала, в виде, вы записываете один или несколько блоков:
Затем, в шаблоне, рендерите блоки если они есть, или показываете контент по умолчанию, если блок не определен.
Использование компонентов вида ¶
Компоненты вида дают много возможностей. Несмотря на то, что существует возможность создавать индивидуальные экземпляры yii\base\View или дочерних классов, в большинстве случаев используется сам компонент view приложения. Вы можете сконфигурировать компонент в конфигурации приложения таким образом:
Компоненты вида предоставляют широкие возможности по работе с видами, они описаны в отдельных секциях документации:
Также удобно пользоваться мелкими, но удобными фичами при разработке веб страниц, которые приведены ниже.
Установка заголовков страниц ¶
У каждой страницы должен быть заголовок. Обычно заголовок выводится в шаблоне. Однако на практике заголовок часто определяется в видах, а не в шаблонах. Чтобы передать заголовок из вида в шаблон, используется свойство title.
В виде можно задать заголовок таким образом:
В шаблоне заголовок выводится следующим образом, (убедитесь, что в у вас соответствующий код):
Регистрация мета-тэгов ¶
На веб страницах обычно есть мета-тэги, которые часто используются различными сервисами. Как и заголовки страниц, мета-тэги выводятся в и обычно генерируются в шаблонах.
Если вы хотите указать, какие мета-тэги генерировать в видах, вы можете вызвать метод yii\web\View::registerMetaTag() в виде так, как в примере ниже:
Этот код зарегистрирует мета тэг «keywords» в виде. Зарегистрированные мета тэги рендерятся после того, как закончен рендеринг шаблона. Они вставляются в то место, где в шаблоне вызван метод yii\web\View::head(). Результатом рендеринга мета тэгов является следующий код:
Обратите внимание, что при вызове метода yii\web\View::registerMetaTag() несколько раз мета тэги будут регистрироваться каждый раз без проверки на уникальность.
Чтобы убедиться, что зарегистрирован только один экземпляр одного типа мета тэгов, вы можете указать ключ мета тэга в качестве второго параметра при вызове метода. К примеру, следующий код регистрирует два мета тэга «description», однако отрендерен будет только второй.
Регистрация тэгов link ¶
Как и мета тэги, link тэги полезны во многих случаях, как, например, задание уникальной favicon, указание на RSS фид или указание OpenID сервера для авторизации. С link тэгами можно работать аналогично работе с мета тэгами, вызывая метод yii\web\View::registerLinkTag(). Например, вы можете зарегистрировать link тэг в виде таким образом:
Как и в случае с registerMetaTag(), вы можете указать ключ вторым параметром при вызове registerLinkTag() чтобы избежать дублирования link тэгов одного типа.
События в видах ¶
Компонент вида вызывает несколько событий во время рендеринга. Вы можете задавать обработчики для этих событий чтобы добавлять контент в вид или делать пост-обработку результатов рендеринга до того, как они будут отправлены конечным пользователям.
Например, следующий код вставляет дату в конец body страницы:
Рендеринг статических страниц ¶
Статическими страницами мы считаем страницы, которые содержат в основном статические данные и для формирования которых не нужно строить динамические данные в контроллерах.
Вы можете выводить статические страницы, сохраняя их в видах, а затем используя подобный код в контроллере:
Полезные советы ¶
Виды отвечают за представление данных моделей в формате, понятным конечным пользователям. В целом, виды
Чтобы сделать виды более управляемыми, избегайте создания видов, которые содержат слишком сложную логику или большое количество кода. Используйте следующие подходы для их упрощения:
Yii Framework
renderAjax инициализация скриптов
renderAjax инициализация скриптов
Сообщение Neuromance » 2015.01.22, 12:47
Имеется кнопка, по нажатию на которую отправляется ajax-запрос и возвращается виджет Editable, который должен добавиться на страницу
Упрощённо представим это так
Re: renderAjax инициализация скриптов
Сообщение Neuromance » 2015.01.22, 13:55
Re: renderAjax инициализация скриптов
Re: renderAjax инициализация скриптов
Сообщение Neuromance » 2015.01.22, 14:21
Re: renderAjax инициализация скриптов
Re: renderAjax инициализация скриптов
Сообщение Neuromance » 2015.01.22, 14:29
Re: renderAjax инициализация скриптов
Re: renderAjax инициализация скриптов
Сообщение Neuromance » 2015.01.22, 15:09
У виджетов все скрипты перенес в head. Но не сработало((
PS. Кстати, проверил, что если в подвале объявлена функция, то она прекрасно вызывается в приходящем ajax-ответе.
Re: renderAjax инициализация скриптов
Сообщение Veysman » 2015.01.22, 15:21
Re: renderAjax инициализация скриптов
Сообщение Neuromance » 2015.01.22, 15:22
Re: renderAjax инициализация скриптов
Сообщение Veysman » 2015.01.22, 15:35
Re: renderAjax инициализация скриптов
Сообщение Neuromance » 2015.01.22, 15:37
Re: renderAjax инициализация скриптов
Сообщение Veysman » 2015.01.22, 15:38
Re: renderAjax инициализация скриптов
Сообщение Veysman » 2015.01.22, 15:40
Re: renderAjax инициализация скриптов
Сообщение Neuromance » 2015.01.22, 15:42
Re: renderAjax инициализация скриптов
Сообщение Neuromance » 2015.01.22, 15:43
Re: renderAjax инициализация скриптов
Сообщение Veysman » 2015.01.22, 15:45
Re: renderAjax инициализация скриптов
Сообщение Neuromance » 2015.01.22, 15:47
Если вы про виджет говорите, то он из композера, не хотелось бы его изменять. Я подумал вы имеете ввиду кнопку, которой я ajax-Запрос отправляю.
И да, у меня на странице этот виджет присутствует в других местах еще до того, как я пытаюсь получать его через ajax. Т.е.все скрипты подгружены изначально.
Renderajax yii2 что это
Создание видов
Совет: Переданные переменные могут быть перечислены в блоке комментария в начале скрипта, чтобы их смогли распознать IDE. К тому же, это хороший способ добавления документации в вид.
Безопасность
При создании видов, которые генерируют HTML страницы, важно кодировать и/или фильтровать данные, которые приходят от пользователей перед тем как их показывать. В противном случае ваше приложение может стать жертвой атаки типа межсайтовый скриптинг
Чтобы показать обычный текст, сначала кодируйте его с помощью [[yii\helpers\Html::encode()]]. В примере ниже имя пользователя кодируется перед выводом:
Чтобы показать HTML содержимое, используйте [[yii\helpers\HtmlPurifier]] для того, чтобы отфильтровать потенциально опасное содержимое. В примере ниже содержимое поста фильтруется перед показом:
Совет: Несмотря на то, что HTMLPurifier отлично справляется с тем, чтобы сделать вывод безопасным, работает он довольно медленно. Если от приложения требуется высокая производительность, рассмотрите возможность кэширования отфильтрованного результата
Организация видов
Как и для контроллеров, и моделей, для видов тоже есть определенные соглашения в их организации.
В контроллерах и виджетах вы можете изменить папки видов по умолчанию, переопределив метод [[yii\base\ViewContextInterface::getViewPath()]].
Рендеринг видов
Вы можете рендерить виды в контроллерах, widgets, или из любого другого места, вызывая методы рендеринга видов. Методы вызываются приблизительно так, как это показано в примере ниже,
Рендеринг в контроллерах
Внутри контроллеров можно вызывать следующие методы рендеринга видов:
Рендеринг в виджетах
Внутри виджетов, вы можете вызывать следующие методы для рендеринга видов.
Рендеринг в видах
Вы можете рендерить вид внутри другого вида используя методы, которые предоставляет [[yii\base\View|компонент вида]]:
Рендеринг в других местах
Именованные виды
При рендеринге вида, вы можете указать нужный вид, используя как имя вида, так и путь к файлу/алиас. В большинстве случаев вы будете использовать первый вариант, т.к. он более нагляден и гибок. Мы называем виды, которые были вызваны с помощью сокращенного имени именованные виды.
Имя вида преобразуется в соответствующий ему путь файла в соответствии со следующими правилами:
Доступ к данным из видов
Данные можно передавать в вид явно или подгружать их динамически, обращаясь к контексту из вида.
Передача данных между видами
[[yii\base\View|Компонент вида]] имеет свойство [[yii\base\View::params|params]], которое вы можете использовать для обмена данными между видами.
Например, в виде about вы можете указать текущий сегмент хлебных крошек с помощью следующего кода.
Затем, в шаблоне, который также является видом, вы можете отобразить хлебные крошки используя данные, переданные через [[yii\base\View::params|params]].
Шаблоны
Создание шаблонов
Большинство шаблонов вызывают методы, аналогично тому, как это сделано в примере выше, чтобы скрипты и тэги, зарегистированные в других местах приложения могли быть правильно отображены в местах вызова (например, в шаблоне).
Доступ к данным в шаблонах
Если вы хотите получить доступ к другим данным из шаблона, используйте метод явной передачи (он описан в секции Доступ к данным в видах настоящего документа). Если вы хотите передать данные из вида шаблону, вы можете использовать метод, описанный в передаче данных между видами.
Использование шаблонов
Вы можете использовать разные шаблоны, конфигурируя [[yii\base\Application::layout]] или [[yii\base\Controller::layout]]. Первый переопределяет шаблон, который используется по умолчанию всеми контроллерами, а второй переопределяет шаблон в отдельном контроллере. Например, код внизу показывает, как можно сделать так, чтобы контроллер использовал шаблон @app/views/layouts/post.php при рендеринге вида. Другие контроллеры, если их свойство layout не переопределено, все еще будут использовать @app/views/layouts/main.php как шаблон.
Для контроллеров, принадлежащих модулю, вы также можете переопределять свойство модуля [[yii\base\Module::layout|layout]], чтобы использовать особый шаблон для этих контроллеров.
Поскольку свойство layout может быть сконфигурировано на разных уровнях приложения (контроллеры, модули, само приложение), Yii определяет какой шаблон использовать для контроллера в два этапа.
На первом этапе определяется значение шаблона и контекстный модуль.
На втором этапе определяется сам файл шаблона для рендеринга на основании значения layout и контекстного модуля. Значением layout может быть:
Вложенные шаблоны
Иногда нужно вложить один шаблон в другой. Например, в разных разделах сайта используются разные шаблоны, но у всех этих шаблонов есть основная разметка, которая определяет HTML5 структуру страницы. Вы можете использовать вложенные шаблоны, вызывая [[yii\base\View::beginContent()|beginContent()]] и [[yii\base\View::endContent()|endContent()]] в дочерних шаблонах таким образом:
В коде выше дочерний шаблон заключается в [[yii\base\View::beginContent()|beginContent()]] и [[yii\base\View::endContent()|endContent()]]. Параметр, передаваемый в метод [[yii\base\View::beginContent()|beginContent()]] определяет родительский шаблон. Это может быть как путь к файлу, так и алиас.
Используя подход выше, вы можете вкладывать шаблоны друг в друга в несколько уровней.
Использование блоков
Блоки позволяют «записывать» контент в одном месте, а показывать в другом. Они часто используются совместно с шаблонами. Например, вы определяете (записываете) блок в виде и отображаете его в шаблоне.
В примере ниже показано, как можно использовать блоки, определенные в виде, чтобы динамически изменять фрагменты шаблона.
Сначала, в виде, вы записываете один или несколько блоков:
Затем, в шаблоне, рендерите блоки если они есть, или показываете контент по умолчанию, если блок не определен.
Использование компонентов вида
[[yii\base\View|Компоненты вида]] дают много возможностей. Несмотря на то, что существует возможность создавать индивидуальные экземпляры [[yii\base\View]] или дочерних классов, в большинстве случаев используется сам компонент view приложения. Вы можете сконфигурировать компонент в конфигурации приложения таким образом:
Компоненты вида предоставляют широкие возможности по работе с видами, они описаны в отдельных секциях документации:
Также удобно пользоваться мелкими, но удобными фичами при разработке веб страниц, которые приведены ниже.
Установка заголовков страниц
У каждой страницы должен быть заголовок. Обычно заголовок выводится в шаблоне. Однако на практике заголовок часто определяется в видах, а не в шаблонах. Чтобы передать заголовок из вида в шаблон, используется свойство [[yii\web\View::title|title]].
В виде можно задать заголовок таким образом:
В шаблоне заголовок выводится следующим образом, (убедитесь, что в у вас соответствующий код):
Регистрация мета-тэгов
На веб страницах обычно есть мета-тэги, которые часто используются различными сервисами. Как и заголовки страниц, мета-тэги выводятся в и обычно генерируются в шаблонах.
Если вы хотите указать, какие мета-тэги генерировать в видах, вы можете вызвать метод [[yii\web\View::registerMetaTag()]] в виде так, как в примере ниже:
Этот код зарегистрирует мета тэг «keywords» в виде. Зарегистрированные мета тэги рендерятся после того, как закончен рендеринг шаблона. Они вставляются в то место, где в шаблоне вызван метод [[yii\web\View::head()]]. Результатом рендеринга мета тэгов является следующий код:
Обратите внимание, что при вызове метода [[yii\web\View::registerMetaTag()]] несколько раз мета тэги будут регистироваться каждый раз без проверки на уникальность.
Чтобы убедиться, что зарегистрирован только один экземпляр одного типа мета тэгов, вы можете указать ключ мета тэга в качестве второго параметра при вызове метода. К примеру, следующий код регистрирует два мета тэга «description», однако отрендерен будет только второй.
Регистрация тэгов link
Как и мета тэги, link тэги полезны во многих случаях, как, например, задание уникальной favicon, указание на RSS фид или указание OpenID сервера для авторизации. С link тэгами можно работать аналогично работе с мета тэгами, вызывая метод [[yii\web\View::registerLinkTag()]]. Например, вы можете зарегистрировать link тэг в виде таким образом:
Как и в случае с [[yii\web\View::registerMetaTag()|registerMetaTags()]], вы можете указать ключ вторым параметром при вызове [[yii\web\View::registerLinkTag()|registerLinkTag()]] чтобы избежать дублирования link тэгов одного типа.
События в видах
[[yii\base\View|Компонент вида]] вызывает несколько событий во время рендеринга. Вы можете задавать обработчики для этих событий чтобы добавлять контент в вид или делать пост-обработку результатов рендеринга до того, как они будут отправлены конечным пользователям.
Например, следующий код вставляет дату в конец body страницы:
Рендеринг статических страниц
Статическими страницами мы считаем страницы, которые содержат в основном статические данные и для формирования которых не нужно строить динамические данные в контроллерах.
Вы можете выводить статические страницы, сохраняя их в видах, а затем используя подобный код в контроллере:
Полезные советы
Виды отвечают за представление данных моделей в формате, понятным конечным пользователям. В целом, виды
Чтобы сделать виды более управляемыми, избегайте создания видов, которые содержат слишком сложную логику или большое количество кода. Используйте следующие подходы для их упрощения: