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

Для генерации 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
При копировании материалов обратная ссылка на play-stop.ru желательна обязательна!