initSQLs для Yii2

В классе yii\db\Connection, заменившем CDbConnection пропал параметр initSQLs. Теперь для настройки таймзоны соединения с базой данных требуется навешивать обработчик события:

    'components' => [
        'db' => [
            'on afterOpen' => function($event) {
                $event->sender->createCommand('set time_zone="+00:00"')->execute();
            },
        ],

Использование конструктора ActiveRecord в Yii2

Все компоненты в Yii2 наследуются от базового класса Object, который принимает на вход массив конфигурации объекта. Это удобно использовать для быстрой инициализации моделей ActiveRecord:

(new LogRecord([
    'userId' => $userId,
    'message' => 'Ololo',
])->insert(false);

Переход на Yii2: DataColumn

В Yii2 изменились параметры описания колонок для GridView. Параметр name теперь называется attribute, параметр type теперь называется format.

Было:

'columns' => [
    [
        'type' => 'html',
        'name' => 'categoryId',
        'value' => function($data) {
            return CHtml::link($data->category->name, ['object-category/update', 'id' => $data->categoryId]);
        }
    ],
],

Стало:

'columns' => [
    [
        'format' => 'html',
        'attribute' => 'categoryId',
        'value' => function($data) {
            return Html::a($data->category->name, ['object-category/update', 'id' => $data->categoryId]);
        }
    ],
],

Переход на Yii2: Дропдаун-листы

Актив-форма в Yii2 была сильно переработана, в частности был изменен подход к созданию инпутов. Кроме того, ушел в прошлое широко известный в узких кругах хелпер CHtml::listData. Вместо него на сцену Yii2 выходит ArrayHelper::map.

echo $form->field($model, 'categoryId')->dropDownList(
    ArrayHelper::map(ObjectCategory::find()->asArray()->all(), 'id', 'name'),
    ['prompt' => 'Выберите из списка']
);

Красивые ссылки в Yii2

Красивые ссылки в Yii2 делаются почти так же, как в первой версии фреймворка.

config/main.php

[
'components' => [
    'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
    ],
]

.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php