Дабы уменьшить г*внокод в разных проектах решил поделиться тем как правильно добавлять заголовки в Yii2 и покажу это на примере включения кроссдоменного Ajax. Читать далее «Headers — заголовки в Yii2, кроссдомены.»
Like в PostgreSQL — Регистрозависимость
К сожалению после перехода с MySQL на PostgreSQL очень сложно сразу начать полноценно работать из-за маленьких но очень важных различий. Читать далее «Like в PostgreSQL — Регистрозависимость»
Ошибка при composer update
Если при выполнении команды php composer.phar update вы столкнулись с ошибкой примерно следующего содержания:
1 2 3 4 5 |
[ReflectionException] Class Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist [ErrorException] Declaration of Fxp\Composer\AssetPlugin\Repository\AbstractAssetsRepository::whatProvides() should be compatible with Composer\Repository\ComposerRepository::whatProvides(Composer\DependencyResolver\Pool $pool, $name, $bypassFilters = false) |
Вам стоит обновить ваш composer используя команду:
1 |
php composer.phar global update fxp/composer-asset-plugin --no-plugins |
После нее повторите команду обновления, все должно работать.
Yii2 Breadcrumbs separator
В Yii1 была классная вещь separator для разделения «крошек», но в Yii2 об этом забыли, теперь для того что бы поменять разделитель нужно добавить в стили следующее
1 2 3 |
.breadcrumb > li + li:before { content: "SEPARATOR_HERE"; } |
где «SEPARATOR_HERE» укажите желаемый символ разделения
Звездочка у поля required Yii2
Раньше в Yii1 если использовать правило required для поля, у лейбла автоматически появлялась звездочка «*»
В Yii2 такую вещь убрали. Что бы решить эту проблему можно воспользоваться CSS.
Вставьте это код в ваше представление (view):
1 2 3 4 5 6 |
<style> div.required label:after { content: " *"; color: red; } </style> |
После этого перезагрузите страницу.
Спасибо yiijeka
Не работает Composer Yii2
Вы только начали знакомство с Yii2, и заметили что многие плагины для него устанавливаются с помощью Composer. При работе на OpenServer у вас может возникнуть примерно следующая ошибка когда вы попытаетесь выполнить команду composer update:
Две таблицы GridView на странице и пагинация
Если у вас не работает пагинация на странице где используется 2 таблицы GridView, а точнее она работает но переключает при переключении страницу обоим таблицам, то вам всего лишь нужно добавить:
1 |
'pageParam' => 'UNIQ_TABLE_NAME', |
Вместо «UNIQ_TABLE_NAME» впишете название для вашей таблице, пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$active = new ActiveDataProvider([ 'query' => Question::find()->where([ 'user_id'=>Yii::$app->user->id, 'milestone_id'=> $milestone->id, ]), 'pagination' => [ 'pageSize' => 5, 'pageParam' => 'active', ] ]); $disactive = new ActiveDataProvider([ 'query' => Question::find() ->where(['user_id'=>Yii::$app->user->id]) ->andWhere(['!=', 'milestone_id', $milestone->id]), 'pagination' => [ 'pageSize' => 10, 'pageParam' => 'disactive', ] ]); |
beforeSave() и afterSave() в Yii2
Замечательные методы beforeSave() и afterSave() в Yii2 помогают нам решать различные задачи, к примеру вы хотите перед сохранением в базу поменять формат даты, или сохранить лог действия. Но не все знают как правильно их наследовать.
Начнем с простого afterSave():
1 2 3 4 5 |
public function afterSave($insert, $changedAttributes){ parent::afterSave($insert, $changedAttributes); //... тут ваш код } |
Тут ничего сложного, мы просто передаем в родительский метод все те же параметры и запускаем его, а потом делаем все нам необходимое.
Теперь beforeSave():
1 2 3 4 5 6 7 8 9 10 |
public function beforeSave($insert) { if (parent::beforeSave($insert)) { //... тут ваш код return true; } return false; } |
Все практические так же как и с методом afterSave() за исключением того что нам нужно вернуть результат работы родительского метода, иначе мы при вызове метода $model->save() будем получать false, и наша модель не будет сохраняться, при этом мы не будем получать никаких ошибок. Учтите этот момент.
В Yii1 принцип такой же, только там не передаются параметры.
Yii2 cookievalidationkey — зачем он нужен и откуда его брать
Если вы устанавливаете Yii2 по средствам скачивания архива, вам необходимо задать cookievalidationkey, он служит для валидации cookie, в противном случае у вас будет ошибка при запуске вашего проекта:
1 |
Invalid Configuration – yii\base\InvalidConfigException |
Есть 2 варианта как это исправить:
1. Ввести ключ, для этого откройте файл yii/config/web.php и введите рандомный набор символов или можно использовать md5(‘asdFw42Q’)
1 2 3 |
'request' => [ 'cookieValidationKey' => 'DSFgksdifhiw899734hekfDFGisjdfi9374', ], |
1 2 3 |
'request' => [ 'cookieValidationKey' => md5('asdFw42Q'), ], |
2. Можно отключить валидацию cookie, для этого нужно прописать следующие:
1 2 3 4 |
'request' => [ 'enableCookieValidation' => false, 'cookieValidationKey' => '', ], |
Как убрать «web» из url yii2
Первый раз когда поставил Yii 2 доступ к сайту был http://site.com/web/
Для того что бы решить эту проблему есть 4 варианта.