37,1
рейтинг
14 февраля в 23:26

Разработка → Yii 2.0.7

Yii*, PHP*
Вышла версия 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() научился работать с циклическими ссылками, что делает логирование и отладочную панель более надёжными.
Александр Макаров @SamDark
карма
286,4
рейтинг 37,1
PHP, Yii, Android

Похожие публикации

Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (7)

  • +1
    За миграции отдельное спасибо!
  • +4
    Для JOIN с связанными записями в Active Record появился упрощённый способ именовать таблицы. Синтаксис, доступный ранее в join(), теперь можно использовать и в joinWith():

    наконец то! больше всего не хватало!
    • 0
      Это да, приходилось использовать полное имя таблицы.
    • 0
      +. У меня сложные запросы на половину исписаны Model::tableName(); Очень удобная штука теперь есть.
  • 0
    Приятно видеть, что фреймворк развивается
  • 0
    А почему изменилась только патч-версия?
    Добавление нового метода в интерфейс — это нарушение обратной совместимости. Должна быть увеличена минорная версия.
    • 0
      Потому что не semver.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.