besnovatyj/yii2-cms-route-alias

Управляемые из админки короткие URL (алиасы маршрутов) фронтенда для Yii2 CMS

Maintainers

Package info

github.com/besnovatyj/yii2-cms-route-alias

Type:yii2-extension

pkg:composer/besnovatyj/yii2-cms-route-alias

Transparency log

Statistics

Installs: 9

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.2 2026-07-22 20:54 UTC

This package is auto-updated.

Last update: 2026-07-22 20:59:22 UTC


README

Управляемые из админки короткие («красивые») URL фронтенда для Yii2 CMS. Админ задаёт литеральный короткий путь и выбирает цель (модуль → базовый роут → slug); одно класс-правило UrlRuleInterface работает в обе стороны на основе точного сопоставления по таблице (никаких пользовательских регекспов). Подробности и обоснование — в PLAN.md.

Как это работает

  • Во вьюхах — обычные Url::to(['/Module/controller/action', ...]).
  • Модуль включён → там, где заведён алиас, в адресной строке короткий URL; для остального — обычные URL.
  • Модуль выключен (modman) → правило исчезает из frontendUrlManager, маршрутизация возвращается к обычной. Ничего не падает — прозрачный fallback. Модуль не является критичной зависимостью.

Установка

sudo -u www-data php yii Modman/modules/install RouteAlias

После установки на проде обновить FPM-код: systemctl reload php8.4-fpm (OPcache), из админки самоинвалидируется автоматически.

Провайдеры целей

Модуль показывает в админке только те цели, которые модули объявили сами, реализовав контракт Besnovatyj\Contracts\routing\AliasTargetProvider (метод класса Yii-модуля). Пилот — модуль Page (Page/page/view, Page/page/group). Чтобы добавить свой модуль:

class Module extends CmsModule implements /* ... */ AliasTargetProvider
{
    public function aliasTargets(): array
    {
        return [new AliasTarget('/My/thing/view', 'Моя сущность', 'slug')];
    }

    public function aliasSlugs(string $route): array
    {
        return ['some-slug' => 'Подпись']; // slug => подпись для выпадающего списка
    }
}

Производительность

Все активные алиасы грузятся одним элементом кэша (APCu) с тегом route_aliases; инвалидация — в Bootstrap на AR-событиях. На горячем пути парсинга/генерации URL — array-лукапы, запросов к БД нет.

Зарезервированные префиксы

params.reservedPrefixes (см. config/config.php) запрещает занимать короткими URL системные/модульные префиксы. Расширяется под конкретный проект.