Если необходимо автоматически распарсить JSON переданный от клиента, то самый простой способ это воспользоваться yii\web\JsonParser
В случае, когда необходимо определить парсер только для некоторых контроллеров/экшенов, можно переопределить метод beforeAction следующим образом:
public function beforeAction($action)
{
\Yii::$app->request->parsers = [
'application/json' => 'yii\web\JsonParser',
];
return parent::beforeAction($action);
}
messages.php
'{n, plural, one{bedroom} few{bedrooms} other{bedrooms}}' => '{n, plural, one{спальня} few{спальни} other{спален}}',
view.php
<?= Yii::$app->i18n->translate(
'messages',
'{n, plural, one{bedroom} few{bedrooms} other{bedrooms}}',
['n' => $model->bedrooms_count],
Yii::$app->language
) ?>
С версии 2.0.13 шаблоны приложений Yii2 используют hiqdev/asset-packagist вместо fxp/composer-asset-plugin, используйте инструкцию ниже, чтобы мигрировать.
Удалите fxp/composer-asset-plugin из системы
composer global remove fxp/composer-asset-plugin
Удалите из секции config
файла composer.json
:
"fxp-asset":{
"installer-paths": {
"npm-asset-library": "vendor/npm",
"bower-asset-library": "vendor/bower"
}
}
Добавьте в ваш composer.json
:
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
В итоге ваш composer.json
должен иметь примерно следующий вид:
{
"minimum-stability": "stable",
"require": {
"dependencies"
},
"require-dev": {
"dev dependencies"
},
"config": {
"process-timeout": 1800
},
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
}
Задайте алиасы в конфигурации вашего приложения(common/config/main.php
для advanced шаблона config/web.php
для basic):
$config = [
...
'aliases' => [
'@bower' => '@vendor/bower-asset',
'@npm' => '@vendor/npm-asset',
],
...
];
Последним шагом вы можете просто удалить ./vendor
и выполнить composer update
, либо переместите ./vendor/bower
в ./vendor/bower-asset
, ./vendor/npm
в ./vendor/npm-asset
,
Есть несколько расширений, советую Insolita/yii2-migrik т.к. сам его проверял.
Так же есть bizley/yii2-migration, но данным расширением не пользовался.
Есть несколько расширений, советую Insolita/yii2-fixturegii т.к. сам его проверял.
Так же есть ElisDN/yii2-gii-fixture-generator, но данным расширением не пользовался.
Для глобального запрета доступа к приложению зачастую применяется антипаттерн GodObject в виде создания базового контроллера и наследования от него. В Yii2 правильным решением данной задачи будет подключение AccessControl
фильтра в конфигурации приложения:
<?php
// other code
return [
// other code
'as access' => [
'class' => yii\filters\AccessControl::class,
'except' => ['site/login', 'site/error'],
'rules' => [
[
'allow' => true,
'roles' => ['admin'],
],
],
],
// other code
];
Данный пример разрешает пользователям с ролью admin
доступ ко всем маршрутам приложения. Маршруты 'site/error'
и site/login
доступны всем пользователям. Настройка ничем не отличается от настроки AccessControl
в behaviors()
контроллера.
Чтобы сделать так называемый login screen, необходимо подменить layout, самый простой и элегантный способ это сделать, повесить обработчик на событие beforeAction
:
'on beforeAction' => function (\yii\base\Event $e) {
/** @var \yii\web\Application $app */
$app = $e->sender;
// Set login layout for guest users
if ($app->getUser()->getIsGuest()) {
$app->layout = 'login';
}
},