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

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

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

Локализация TbDateRangeRow

В свежем бустере есть классный виджет для выборки диапазона дат. К сожалению, этот виджет не поддерживает локализацию из коробки. Приходится костылить такие вот конструкции:

< ?=
$form->dateRangeRow($model, 'period', [
    'options' => [
        'format' => 'DD.MM.YYYY',
        'locale' => [
            'applyLabel' => 'Применить',
            'cancelLabel' => 'Очистить',
            'fromLabel' => 'От',
            'toLabel' => 'До',
            'weekLabel' => 'Н',
            'customRangeLabel' => 'Задать даты',
            'firstDay' => 1,
        ],
        'ranges' => [
            'Сегодня' => 'js:[moment(), moment()]',
            'Вчера' => 'js:[moment().subtract("days", 1), moment().subtract("days", 1)]',
            'Последние 7 дней' => 'js:[moment().subtract("days", 6), moment()]',
            'Последние 30 дней' => 'js:[moment().subtract("days", 29), moment()]',
            'В этом месяце' => 'js:[moment().startOf("month"), moment().endOf("month")]',
            'В прошлом месяце' => 'js:[moment().subtract("month", 1).startOf("month"), moment().subtract("month", 1).endOf("month")]',
        ]
    ],
]); ?>

Конфигурация nginx для запуска Yii

Правильный конфиг выглядит примерно так:

server {
    server_name yiisite.loc;
    listen 80;

    root /var/www/yiisite;

    location / {
        index index.php index.htm index.html;
        try_files $uri $uri/ @yii;
    }

    location @yii {
        rewrite ^ /index.php last;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param YII_ENVIRONMENT production;
        fastcgi_pass 127.0.0.1:1234;
    }

    location /protected {
        deny all;
        access_log off;
    }

    location ~ /themes/\w+/views {
        deny all;
        access_log off;
    }

    location ~ /\. {
        deny all;
        access_log off;
    }
}

Красивые ссылки в 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

Локализация форматирования в Yii

Начиная с Yii 1.1.14, во фреймворке появился класс CLocalizedFormatter.

Этим классом можно заменить компонент format, отвечающий за форматирование вывода в приложении по-умолчанию:

'components' => [
    'format' => ['class' => 'CLocalizedFormatter'],
]

Как это может помочь? Например, теперь можно легко и просто выводить локализованные данные в строках CDetailView и колонках CGridView, явно указывая тип:

'columns' => [
    'createdAt:date:Дата создания',
    'valid:boolean',
    [
        'name' => 'expiresAt',
        'type' => 'datetime',
    ],
]