Phalcon PHP: modifica un URL di richiesta prima che venga inviato

Sto cercando un modo per modificare un URL di richiesta prima che venga inviato. Ad esempio, i seguenti URL dovrebbero essere gestiti dallo stesso controller / azione:

/en/paris /de/paris /paris 

Vorrei catturare il codice del paese, se presente, quindi riscrivere l'URL senza di esso in modo che i controllori non debbano occuparsene. Ho provato l'evento 'dispatch: beforeDispatchLoop' ma non è stato progettato per questo.

Qualche idea?

Se puoi convenire che tutto il codice del paese viene prima nel path, forse una regola di riscrittura aggiuntiva può aiutarti a:

 <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> 

MODIFICARE

Se hai davvero bisogno di farlo in PHP, ti consiglio di intercettare il codice del paese al più presto per non rompere il comportmento predefinito del routing (cioè è necessario scrivere tutti i routes manualmente). Un modo per farlo è impostare un servizio condiviso nel DI principale per sostituire il servizio 'router' predefinito. Il router personalizzato consiste semplicemente in un figlio di Phalcon \ Mvc \ Router con il metodo getRewriteUri sovrascritto da qualcosa che fa ciò che vuoi, ma restituisce l'URI senza la parte del codice paese:

 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; } }