- PVSM.RU - https://www.pvsm.ru -

Yii 2.0.7

Вышла версия 2.0.7 PHP фреймворка Yii. Как установить или обновиться описано на странице http://www.yiiframework.com/download/ [1].

Данная версия содержит более сотни улучшений и исправлений [2], уточнения документации и её переводы.

Для обновления может понадобится выполнить дополнительные действия, описанные в UPGRADE.md [3].

Спасибо нашему замечательному сообществу [4], которое дало нам множество пулл-реквестов и обсуждений. Без вас этого релиза не было бы. Спасибо!

За процессом разработки Yii можно следить, поставив звёздочку или нажав на watch на странице проекта на GitHub [5]. Также у нас есть Twitter [6] и группа в Facebook [7].

Ну а теперь рассмотрим самые интересные улучшения и исправления этого релиза.

Вадидатор IP

Новый валидатор может проверять IP на чёткое соответствие, диапазоны и маски. Он может использоваться как отдельный валидатор, так и как часть метода rules() модели:

public function rules()
{
    return [
        ['address', 'ip', 'ranges' => [
             '192.168.10.128'
             '!192.168.10.0/24',
             'any' // все остальные адреса
        ]],
    ];
}

Подробнее возможности валидатора описаны в руководстве [8], комментариев к классу [9] и
тестах [10].

i18n

Форматтер обзавёлся новым методом asDuration(), который позволяет получить читабельную строку из интервала времени, представленного объектом DateInterval [11], количеством секунд или строкой ISO8601 [12]:

echo Yii::$app->formatter->asDuration(131);
// выведет "2 minutes, 11 seconds"

Теперь через yiii18nFormatter::$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');
// выведет "۱۳۹۴"

Подробное описание можно найти в документации к классу [13].

Кроме того, транслитерация вне контекста URL теперь доступна как Inflector::transliterate() [14], что полезно для генерации ключевых слов и других метаданных при разработке под такие языки, как Вьетнамский.

Базы данных

Помимо исправлений в релиз были включены и несколько интересных улучшений. В Query::groupBy() и Query::orderBy() теперь можно использовать yiidbExpression:

$expression = new Expression('SUBSTR(name, 2)');
$users = (new yiidbQuery)
    ->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');
    }
}

Синтаксис подробно описан в руководстве [15]. Надеемся, нововведение сбережёт ваше время.

Расширение интерфейса RBAC

В интерфейс RBAC было добавлен метод getUserIdsByRole() [16]. Он наверняка будет полезен при разработке админки для ролей и разрешений.

Обработка и вывод ошибок

  • Добавлена поддержка кодов ошибок PHP 5.5 при обработке JSON. Это позволяет точно определить причину, по которой кодирование в JSON не удалось.
  • VarDumper::dump() научился работать с магическим методом PHP __debugInfo().
  • Обработчик ошибок из соображений безопасности больше не показывает $_ENV и $_SERVER на странице ошибок. Отображаемые данные настраиваются через yiiwebErrorHandler::$displayVars [17].
  • yiihelpersVarDumper::export() научился работать с циклическими ссылками, что делает логирование и отладочную панель более надёжными.

Автор: SamDark

Источник [18]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/112252

Ссылки в тексте:

[1] http://www.yiiframework.com/download/: http://www.yiiframework.com/download/

[2] более сотни улучшений и исправлений: https://github.com/yiisoft/yii2/blob/2.0.7/framework/CHANGELOG.md

[3] UPGRADE.md: https://github.com/yiisoft/yii2/blob/2.0.7/framework/UPGRADE.md

[4] замечательному сообществу: https://github.com/yiisoft/yii2/graphs/contributors

[5] на странице проекта на GitHub: https://github.com/yiisoft/yii2

[6] Twitter: https://twitter.com/yiiframework

[7] группа в Facebook: https://www.facebook.com/groups/yiitalk/

[8] в руководстве: http://www.yiiframework.com/doc-2.0/guide-tutorial-core-validators.html#ip

[9] комментариев к классу: http://www.yiiframework.com/doc-2.0/yii-validators-ipvalidator.html

[10] тестах: https://github.com/yiisoft/yii2/blob/2.0.7/tests/framework/validators/IpValidatorTest.php

[11] объектом DateInterval: http://php.net/manual/ru/class.dateinterval.php

[12] строкой ISO8601: https://ru.wikipedia.org/wiki/ISO_8601

[13] документации к классу: http://www.yiiframework.com/doc-2.0/yii-i18n-formatter.html#$calendar-detail

[14] Inflector::transliterate(): http://www.yiiframework.com/doc-2.0/yii-helpers-baseinflector.html#transliterate()-detail

[15] в руководстве: http://www.yiiframework.com/doc-2.0/guide-db-migrations.html#generating-migrations

[16] getUserIdsByRole(): http://www.yiiframework.com/doc-2.0/yii-rbac-managerinterface.html#getUserIdsByRole()-detail

[17] yiiwebErrorHandler::$displayVars: http://www.yiiframework.com/doc-2.0/yii-web-errorhandler.html#$displayVars-detail

[18] Источник: https://habrahabr.ru/post/277201/