Для генерации slug в Yii2 используется поведение SlugBehavior, но без дополнительных настроек у него есть довольно неприятная особенность в сочетании с русским языком, он неверно преобразует некоторые буквы, к примеру: букву ш он переводит в s, а хотелось бы видеть sh. Давайте разберемся как этого избежать.
Для решения проблемы со стандартным поведение у меня есть 3 варианта:
1. Использовать вместо стандартного готовое поведение Yii2 slug behavior от zelenin
2. В конфигурации приложения на некоторые события переопределять статическую переменную $transliterator
'on beforeRequest' => function ($event) { \yii\helpers\BaseInflector::$transliterator = 'Russian-Latin/BGN; Any-Latin; Latin-ASCII; NFD; [:Nonspacing Mark:] Remove; NFC;'; },
3. Сделать то же самое, но переопределив весь хелпер yii\helpers\Inflector в соответствии с документацией к фраймворку. Для этого создаем файл Inflector с содержанием
<?php namespace yii\helpers; class Inflector extends BaseInflector { public static $transliterator = 'Russian-Latin/BGN; Any-Latin; Latin-ASCII; NFD; [:Nonspacing Mark:] Remove; NFC;'; }
в папке common/ext/ и в файле common/config/bootstrap.php заменяем, использующийся по-умолчанию, нашим:
Yii::$classMap['yii\helpers\Inflector'] = '@common/ext/Inflector.php';comments powered by HyperComments