Razor — новый движок представлений для Yii Framework

4 августа 2010 г.

Всем привет,
представляю Вашему вниманию обзор нового шаблонизатора для PHP фреймворка Yii.
Весь исходный код доступен под лицензией «MIT» на code.google.com

Побудила написать меня это расширение статья Скота Гатри.
Очень понравилась идея нового движка представлений ASP.NET 4.0 под названием «Razor».

Для начала использования этого расширения необходимо скачать последнюю версию файла RazorViewRenderer.php
и сохранить ее, например, в каталоге protected/extensions/renderers вашего веб-приложения.
Далее настройте в файле конфигурации веб-приложения компонент «viewRenderer» похожим образом:

array(

     'components'=>array(

    ......

    'viewRenderer'=>array(

   'class'=>'ext.renderers.RazorViewRenderer',

   'fileExtension'=>'.tpl',

    ),

     ),

)

Приведу пример HelloWorld шаблона, в котором постараюсь сразу показать всю прелесть Razor-синтаксиса:

<h1>Пример Razor</h1>

<h3>

    Привет @$name, сегодня @date("d.m.Y")

</h3>

<p class="products">

    Список продуктов:

    @foreach ($products as $p) {

   <div class="product">

   @$p->title, цена: @$p->price руб. <a href="@Yii::app()->params['baseUrl']/product/@$p->getId()/">Подробнее</a>

   </div>

    }

</p>

Как видно из примера Вам не нужно использовать дополнительные синтаксические конструкции вида
Для того, чтобы вывести значение какой-нибудь переменной или результат метода в представлении вам достаточно поставить перед этим выражением символ @. Шаблонизатор определит окончание выражения самостоятельно.

В текущей версии поддерживаются Razor-конструкции вида: @foreach, @for, @while, @if, @if…elseif…else

Есть поддержка многострочных выражений:

@{

   $obj = new Obj();

   $someVar = "Значение: " . $obj->getValue();

   // ... еще какая-нибудь логика, которая почему-то расположена здесь а не в контроллере

}

Добавил возможность выводить выражение, состоящее из нескольких токенов с помощью Razor-конструкции @(…)
Например:

<p>Статус: @($statusFlag ? "Активный" : "Не активный")</p>

Данную конструкцию также можно использовать для устранения неоднозначностей:

@($obj->publicFieldNotMethod)(а в этих скобках уже HTML)

Из того, что хотелось бы еще сделать:

  • добавить альясы для часто используемых функций Yii фреймворка в представлениях: использование виджетов и кэширование;
  • получить отзывы и совместными усилиями продолжить работу над этим расширением;

В заключении:

  • простой и локаничный синтаксис шаблонов;
  • блоки конструкций @foreach, @for, @while, @if могут содержать вложенные Razor-выражения и HTML код;
  • все выражения выводимые с помощью конструкции @ по-умолчанию проходят обработку htmlspecialchars() для защиты от XSS атак;

За более детальным описанием прошу следовать на wiki-страницу проекта.

Теги: рубрика PHP
  • Похожие статьи
  • Предыдущие из рубрики