besnovatyj / yii2-cms-route-alias
Управляемые из админки короткие URL (алиасы маршрутов) фронтенда для Yii2 CMS
Package info
github.com/besnovatyj/yii2-cms-route-alias
Type:yii2-extension
pkg:composer/besnovatyj/yii2-cms-route-alias
Requires
- php: >=8.4
- besnovatyj/yii2-cms-backend-widgets: ^1.0
- besnovatyj/yii2-cms-contracts: ^1.0
- besnovatyj/yii2-cms-forms: ^1.0
- besnovatyj/yii2-cms-kernel: ^1.2
- yiisoft/yii2: ~2.0.0
- yiisoft/yii2-bootstrap5: ~2.0.0
Requires (Dev)
- roave/security-advisories: dev-latest
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 системные/модульные
префиксы. Расширяется под конкретный проект.