Phalcon PHP: измените URL-адрес запроса перед его отправкой

Я ищу способ изменить URL-адрес запроса до его отправки. Например, следующие URL-адреса должны обрабатываться одним и тем же контроллером / действием:

/en/paris /de/paris /paris 

Я хотел бы захватить код страны, если он присутствует, а затем переписать URL-адрес без него, чтобы контроллеры не имели дело с этим. Я попробовал событие «отправка: beforeDispatchLoop», но для этого он не предназначен для создания шва.

Есть идеи?

Если вы можете согласиться с тем, что код всей страны будет первым в пути, возможно, дополнительное правило перезаписи может помочь вам:

 <IfModule mod_rewrite.c> RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([az]{2})/(.*)$ index.php?_lang=$1&_url=/$2 [QSA,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L] </IfModule> 

РЕДАКТИРОВАТЬ

Если вам действительно нужно сделать это на PHP, я бы рекомендовал вам перехватить код страны как можно раньше, чтобы не нарушить поведение маршрутизации по умолчанию (т.е. нужно писать все маршруты вручную). Один из способов сделать это – установить общую службу в вашем основном DI для замены службы 'router' по умолчанию. Пользовательский маршрутизатор состоит только из дочернего узла Phalcon \ Mvc \ Router с методом getRewriteUri, переопределенным чем-то, что делает то, что вы хотите, чтобы просто вернуть URI без части кода страны:

 namespace MyApp\Services; use Phalcon\Mvc\Router as PhRouter; class Router extends PhRouter { public function getRewriteUri() { $originalUri = parent::getRewriteUri(); // Now you can: // Check if a country code has been sent and extract it // Store locale configurations to be used later // Remove the country code from the URI return $newUri; } }