У меня проблема с маршрутизацией нового проекта.
Для большинства действий и сущностей, таких как пользователи, URL-адреса никогда не меняются, поскольку имена пользователей, т. Е. Уникальны и не могут быть изменены. Для этого мы можем легко использовать такие маршруты:
Router::connect('/a/:username/topic/:id', array('controller' => 'users', 'action' => 'view'),array('pass' => array('username','id'),'username' => '[^-]+','id' => '[0-9]+'));
Router::connect('/a/:username', array('controller' => 'users', 'action' => 'view'),array('pass' => array('username'),'username' => '[^-]+'));
Но для постов (и некоторых других объектов) заголовки могут / будут меняться из-за опечаток или чего-то еще.
Представьте, что вы меняете название поста (или что-то еще) 5 раз. Каждый раз было построено несколько внешних ссылок. Поэтому мы хотим убедиться, что каждая внешняя ссылка по-прежнему работает и перенаправляет на текущий URL-ключ с правильным / измененным заголовком со статусом 301.
Из-за этого мы попытались реализовать таблицу для маршрутов со следующими полями:
id, source, ref_id, target_controller, target_action, target_param, parent_id
Каждый раз, когда загружается rout.php, цикл foreach будет проходить по таблице и соединяться с каждым маршрутом, у которого НЕТ родителя. Отсутствие родителя означает, что запись является текущим (самым последним) ключом URL для конкретной сущности.
Если запрос идет на «старый» URL-ключ, мы автоматически перенаправляем на родительский (самый последний ключ) с 301.
Это работает довольно хорошо, но ....:
Позже, когда эта таблица содержит тысячи записей, приложение будет читать все эти записи (если только кэш не обновлен) и будет «маршрутизировать :: соединять» тысячи маршрутов вместо 5-10 очень общих маршрутов, подобных тем, которые видели выше. И это каждый раз, когда наш «кэш маршрутов» устарел (что может быть очень часто).
Я спрашиваю себя, нет ли другого решения, позволяющего поддерживать все старые маршруты в рабочем состоянии, не съедая много производительности.
Буду рад любой обратной связи.
Большое спасибо!