Команда Yii зарелизила версию 1.1.11, в которую вошли более ста улучшений и багфиксов.
Этот релиз особенный потому как является первым с тех пор, как код Yii мигрировал на GitHub. Сообщество восприняло миграцию очень хорошо и выложилось по полной, прислав в виде pull-request новые возможности, исправления, unit-тесты и переводы.
За всё это огромное спасибо! Особенно отметим: resurtm, DaSourcerer, cebe и suralc.
Можно ознакомиться со списком изменений и новыми возможностями. Если планируете обновиться, внимательно читайте инструкции.
После релиза обнаружились некоторые неприятные ошибки. Работаем.
Ну а теперь рассмотрим некоторые изменения.
Проддержка полей HTML5 в CHtml
В CHtml
добавлены новые методы:
-
CHtml::dateField()
-
CHtml::rangeField()
-
CHtml::numberField()
-
CHtml::emailField()
-
CHtml::urlField()
-
CHtml::activeDateField()
-
CHtml::activeRangeField()
-
CHtml::activeNumberField()
-
CHtml::activeEmailField()
-
CHtml::activeUrlField()
Использовать так:
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. Инструменты позволяют получить все изменения, произведённые с последнего обновления перевода. Надеемся, что это поможет поддерживать переводы документации в актуальном состоянии.
Автор: SamDark
Интересная статья!!!