3 способа сделать транслитерацию с помощью SlugBehavior в Yii2 по ГОСТ

Для генерации slug в Yii2 используется поведение SlugBehavior, но без дополнительных настроек у него есть довольно неприятная особенность в сочетании с русским языком, он неверно преобразует некоторые буквы, к примеру: букву ш он переводит в s, а хотелось бы видеть sh. Давайте разберемся как этого избежать.

читать далее

Храним Emoji смайлики в mysql используя Yii2

Вначале в конфигурации подключения к БД меняем кодировку подключения на utf8mb4

'components' => [
        'db' => [
            'class' => 'yii\db\Connection',
            'charset' => 'utf8mb4',
        ],
    ],

Далее заменяем кодировку таблиц базы данных с utf8_general_ci на utf8mb4_general_ci. Вставляем смайлики и радуемся что они корректно сохраняются в таблицах.

Переопределяем __set и __get методы для аттрибута модели Yii2

Не всегда получается красиво сохранить приходящие данные в БД, к примеру такая ситуация может возникнуть при сохранении списка в одну ячейку, чтобы было более понятно приведу часть кода представления:

$form->field($model, 'color')->checkboxList(Yii::$app->params['color'], [
   'item' => function($index,$label,$name, $checked, $value){
      return Html::checkbox($name, $checked, [
         'value' => $value,
         'label' => '<label class="color ' . $label .'" for="' . $value . '"></label>',
         'id' => $value
      ]);
   }
]);

Здесь мы выводим список чекбоксов в которых предлагаем выбрать нужные цвета, данное представление нам отправит массив отмеченных значений.

читать далее

Стандартный url для определенного контроллера

'admin' => 'admin/index',
'admin/<action:[\\w\\-]+>' => 'admin/<action>'

Данный правила можно разместить в секции rules urlManager’а в конфигурации приложения и получить стандартные url для определенного контроллера, в нашем случае для контроллера admin. При этом enablePrettyUrl и enableStrictParsing могут быть установлены в true. Полезно когда нужно, чтобы без дополнительной головной боли работали стандартная сортировка и фильтрация в GridView для admin, а так же срабатывали другие правила для формирования ЧПУ в другом контроллере.

Получить все роли пользователей в Yii2

При изучении RBAC Yii2 у многих возникает вопрос, а как же получить все роли пользователей? Ответ довольно простой, скорее всего поэтому он быстро не гуглится. В итоге если у вас сам RBAC настроен верно, то список ролей можно получить так:

Yii::$app->getAuthManager()->getRoles()

или то же самое с помощью «магии»

Yii::$app->authManager->roles

Думаю еще одной интересной строчкой будет преобразование полученного массива в массив название роли -> описание, а сделать это можно так:

ArrayHelper::map(Yii::$app->authManager->roles,'name','description')

Выполнить OrderBy перед GroupBy при использовании MySQL, и Yii2

Небольшая заметка, которая может ответить не только на проблему, обозначенную в заголовке, но и продемонстрировать 3 способа построения запроса и получения результатов запросов. К сожалению, стандартно подставив команду OrderBy перед GroupBy в MySQL вы получите совсем не то что ожидаете, а происходит это потому, что выполняется сначала группировка данных, а уже затем они сортируются, но уже в результирующем наборе нет нужных нам данных, решается эта проблема в «подсовывании» новой таблицы уже с правильной для нас сортировкой, запросом это выглядит примерно так:

читать далее

Ограничения по типам запросов в Yii 2, компонент VerbFilter

В Yii2 встроен удобный фильтр ограничения доступа к экшену по типам запросов к нему, компонент называется VerbFilter, а используется он как ключ verbs в поведении (behaviors) контроллера. Под катом подробнее.

читать далее

Занимательный Spaceless виджет в Yii2 или вырезаем все пробелы

Довольно интересный виджет из коробки имеется в yii2, название ему Spaceless, а занимается он вырезанием пробелов, дабы полностью исключить возможные баги браузеров с переносом строки. Работает все это довольно просто:

читать далее

Вариант использования метода afterFind в модели

Многие хранят дату/время в базе данных в формате timestamp, а точнее хранят ее в колонке с типом integer, посему при выводе возникает необходимость преобразования числа секунд в дату/время, делают это обычно примерно так:

echo date('Y-m-d H:i:s',$model->date);

читать далее

Хранение паролей в Yii2

Здравствуйте! Сегодня хотелось бы поговорить о методах, позволяющих повысить безопасность, в приложениях на Yii2.

Поскольку алгоритмы шифрования паролей алгоритмами md5 or sha1 уже не внушают сильного доверия. В Yii2 был реализован метод реализующий хеширование bcrypt.


 

$hash_pass=Yii::$app->getSecurity()->generatePasswordHash('123');

 

в результате выполнения данного метода переменная $hash_pass будет содержать приблизительно следующее значение из 64 символов

 

$2y$13$imm.m0q9qN/IrWF4AtmH4ejHyS3d.ElmkayY3vQ69DTApgEY4ne36

 

Также у generatePasswordHash можно указать вторым параметром сложность шифрования

 

$hash_pass=Yii::$app->getSecurity()->generatePasswordHash('123',10);

 

по умолчанию этот параметр имеет значение 13. В официальной документации рекомендуют выставлять этот параметр повыше, но не стоит увлекаться.

Это довольно ресурсоемкий процесс. Если представить, что ваш компьютер сосчитает хеш со сложностью 14 за 1 секунду, то формула по нахождению времени расчета хеша будет выглядеть так 2^(сложность — 14) секунд.

В отличии от md5, при повторном вызове данного метода, будет сгенерирован абсолютно другой набор символов! Для этого для валидации пароля используется следующий код.

 

Yii::$app->getSecurity()->validatePassword($pass, $hash_pass);

 

Метод вернет true в случае успешной проверки и false в случае несоответствия данных.

При копировании материалов обратная ссылка на play-stop.ru желательна обязательна!