Примечание. Я предполагаю, что ваши рекламные URL-адреса имеют вид "domain.com/advert-259" или что-то в этом роде (то есть, нет) -259 '). Это было бы слишком просто:)
Надеюсь, вы можете использовать маршрутизацию с некоторым регулярным выражением. Добавьте это в ваш /config/routes.php и дайте мне знать, поможет ли другое регулярное выражение:)
$controllers = Configure::listObjects('controller');
foreach ($controllers as &$value)
{
$value = Inflector::underscore($value);
}
Router::connect('/:promo', array('controller' => 'promos', 'action' => 'process'), array('promo' => '(?!('.implode('|', $controllers).')\W+)[a-zA-Z\-_]+/?$'));
Теперь вы можете обрабатывать все свои промо-коды в PromosController::process()
.
По сути, он проверяет промо-код в URL, , исключая те, что в массиве $ controllers (т. Е. Ваши обычные маршруты не будут испорчены).
Позже вы можете рассмотреть возможность кэширования значения Configure::listObjects()
в зависимости от скорости вашего приложения и ваших требований.