Команда PHP-фреймворка Yii зарелизила версию 1.1.11, в которую вошли более ста улучшений и багфиксов.

Этот релиз особенный потому как является первым с тех пор, как код Yii мигрировал на GitHub. Сообщество восприняло миграцию очень хорошо и выложилось по полной, прислав в виде pull-request новые возможности, исправления, unit-тесты и переводы.

За всё это огромное спасибо! Особенно отметим: resurtm, DaSourcerer, cebe и suralc.

Можно ознакомиться со списком изменений и новыми возможностями. Если планируете обновиться, внимательно читайте инструкции.

После релиза обнаружились некоторые неприятные ошибки. Работаем.


Ну а теперь рассмотрим некоторые изменения.



Поддержка полей HTML5 в CHtml



В CHtml добавлены новые методы:



Использовать так:

echo CHtml::activeNumberField($model, 'fieldName');


CFormatter::formatSize()



Новый метод, позволяющий получить нормально читаемый размер из размера в байтах:

echo Yii::app()->format->formatSize(115969);
// покажет: 113.25 KB


Коды возврата консольного приложения



Теперь можно вернуть integer из действия консольного приложения. Значение будет использовано как код возврата.

Подробнее в руководстве

CJavaScript::encode() и js:



Если вы использовали CJavaScript::encode() и при этом брали значение из формы или URL, ваше приложение, скорее всего уязвимо. Чтобы закрыть уязвимость, необходимо передать вторым параметром true:

CJavaScript::encode($userInput, true);


Параметр запретит использовать префикс js:. Если вам всё-таки необходимо передать выражение JavaScript обрамите его CJavaScriptExpression:

CJavaScript::encode(new CJavaScriptExpression('alert("Yii!");'), true);


Второй параметр (safe) не влияет на поведение CJavaScriptExpression.

HTTP-кэширование



В дополнение к обычному кешированию страниц, в новой версии можно использовать CHttpCacheFilter. Этот фильтр отсылает заголовки HTTP, которые дают клиенту понять, что содержимое страницы не менялось с последнего запроса. Серверу в этом случае нет необходимости повторно отсылать содержимое. Настраивается CHttpCacheFilter также, как и COutputCache:

public function filters()
{
    return array(
        array(
            'CHttpCacheFilter + index',
            'lastModified'=>Yii::app()->db->createCommand("SELECT MAX(`update_time`) FROM {{post}}")->queryScalar(),
        ),
    );
}


Подробнее в руководстве

Исключение правил валидации модели



Если вы не хотите использовать для ��алидации одно из правил когда активен определённый сценарий, то можете теперь указать параметр except, содержащий список сценариев. Синтаксис такой же, как и у on:

// строка имён через запятую (пробелы игнорируются)
array('username', 'required', 'except'=>'ignore, this, scenarios, at-all',)


Подробнее в руководстве

Новый инструментарий и документация для переводчиков



Новая документация задаёт рабочий процесс для перевода с использованием github. Инструменты позволяют получить все изменения, произведённые с последнего обновления перевода. Надеемся, что это поможет поддерживать переводы документации в актуальном состоянии.