у меня проблема с маршрутизацией нового проекта.
Для большинства действий и сущностей, таких как пользователи, 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
Каждый раз, когда вызывается route.php, цикл foreach будет проходить по таблице и соединять каждый маршрут, у которого НЕТ родителя. Отсутствие родителя означает, что запись является текущим (самым последним) ключом URL для определенного объекта.
Если запрос идет на «старый» URL-ключ, мы автоматически перенаправляем на родительский (самый последний ключ) с ошибкой 301.
Это работает очень хорошо, но.... :
Позже, когда эта таблица будет содержать тысячи записей, приложение прочитает все эти записи (если только кеш не обновлен) и выполнит «router::connect» тысячи маршрутов вместо 5-10 очень общих маршрутов, подобных показанным выше. И что каждый раз наш «кеш маршрутов» устаревает (что, вероятно, бывает очень часто).
Я спрашиваю себя, нет ли другого решения, позволяющего поддерживать работу всех старых маршрутов, не снижая производительности.
буду рад получить любую обратную связь. большое спасибо!