YiiConf 2017 всё ближе! Не забудьте купить билет.
Yii 1.1.11

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

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

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

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

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

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

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

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

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

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

CFormatter::formatSize()

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

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

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

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

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

CJavaScript::encode() и js:

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

[php]
CJavaScript::encode($userInput, true);

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

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

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

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

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

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

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

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

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

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

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

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

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