Yii 2.0.7
Вышла версия 2.0.7 PHP фреймворка Yii. Как установить или обновиться описано на странице http://www.yiiframework.com/download/.
Данная версия содержит более сотни улучшений и исправлений, уточнения документации и её переводы.
Для обновления может понадобится выполнить дополнительные действия, описанные в UPGRADE.md.
Спасибо нашему замечательному сообществу, которое дало нам множество пулл-реквестов и обсуждений. Без вас этого релиза не было бы. Спасибо!
За процессом разработки Yii можно следить, поставив звёздочку или нажав на watch на странице проекта на GitHub. Также у нас есть Twitter и группа в Facebook.
Ну, а теперь рассмотрим самые интересные улучшения и исправления этого релиза.
Валидатор IP
Новый валидатор может проверять IP на чёткое соответствие, диапазоны и маски. Он может использоваться как отдельный валидатор, так и как часть метода rules()
модели:
public function rules()
{
return [
['address', 'ip', 'ranges' => [
'192.168.10.128'
'!192.168.10.0/24',
'any' // все остальные адреса
]],
];
}
Подробнее возможности валидатора описаны в руководстве, комментариях к классу и
тестах.
i18n
Форматтер обзавёлся новым методом asDuration()
, который позволяет получить читабельную строку из интервала времени, представленного объектом DateInterval, количеством секунд или строкой ISO8601:
echo Yii::$app->formatter->asDuration(131);
// выведет "2 minutes, 11 seconds"
Теперь через yii\i18n\Formatter::$calendar
можно выбрать, по какому календарю форматировать даты. Например, вот так можно использовать Персидский календарь:
Yii::$app->formatter->locale = 'fa_IR@calendar=persian';
Yii::$app->formatter->calendar = \IntlDateFormatter::TRADITIONAL;
Yii::$app->formatter->timeZone = 'UTC';
$value = 1451606400; // Fri, 01 Jan 2016 00:00:00 (UTC)
echo Yii::$app->formatter->asDate($value, 'php:Y');
// выведет "۱۳۹۴"
Подробное описание можно найти в документации к классу.
Кроме того, транслитерация вне контекста URL теперь доступна как Inflector::transliterate()
, что полезно для генерации ключевых слов и других метаданных при разработке под такие языки, как вьетнамский.
Базы данных
Помимо исправлений в релиз были включены и несколько интересных улучшений. В Query::groupBy()
и Query::orderBy()
теперь можно использовать yii\db\Expression
:
$expression = new Expression('SUBSTR(name, 2)');
$users = (new \yii\db\Query)
->from('user')
->orderBy($expression)
->limit(10)
->all();
Для SQLite стало возможным использование псевдонимов в DSN:
'db' => [
'dsn' => 'sqlite:@app/db/database.sqlite3',
]
Для JOIN с связанными записями в Active Record появился упрощённый способ именовать таблицы. Синтаксис, доступный ранее в join()
, теперь можно использовать и в joinWith()
:
// join-им с заказами и сортируем результат по orders.id
$query->joinWith(['orders o'])->orderBy('o.id');
Улучшения в новом синтаксисе миграций
Новый синтаксис миграций, введённый в 2.0.6, получил несколько улучшений. Во-первых, это поддержка unsigned
:
'createdBy' => $this->integer(10)->unsigned(),
Во-вторых, теперь можно использовать выражения в качестве значений по умолчанию:
$this->integer()->defaultExpression('CURRENT_TIMESTAMP');
Консольный генератор миграций
Команда ./yii migrate/create
стала умнее. На основе имени создаваемой миграции и параметров она научилась генерировать код самой миграции:
./yii migrate/create create_post --fields=title:string,body:text
сгенерирует:
class m150811_220037_create_post extends Migration
{
public function up()
{
$this->createTable('post', [
'id' => $this->primaryKey(),
'title' => $this->string(),
'body' => $this->text()
]);
}
public function down()
{
$this->dropTable('post');
}
}
Синтаксис подробно описан в руководстве. Надеемся, нововведение сбережёт ваше время.
Расширение интерфейса RBAC
В интерфейс RBAC было добавлен метод getUserIdsByRole()
. Он наверняка будет полезен при разработке админки для ролей и разрешений.
Обработка и вывод ошибок
- Добавлена поддержка кодов ошибок PHP 5.5 при обработке JSON. Это позволяет точно определить причину, по которой кодирование в JSON не удалось.
VarDumper::dump()
научился работать с магическим методом PHP__debugInfo()
.- Обработчик ошибок из соображений безопасности больше не показывает
$_ENV
и$_SERVER
на странице ошибок. Отображаемые данные настраиваются черезyii\web\ErrorHandler::$displayVars
. yii\helpers\VarDumper::export()
научился работать с циклическими ссылками, что делает логирование и отладочную панель более надёжными.