Hinzufügen eines Präfixes zu jeder URL in CakePHP

Was ist der sauberste Weg, um jeder URL in CakePHP ein Präfix wie einen Sprachparameter hinzuzufügen?

http://example.com/en/controller/action
http://example.com/ru/admin/controller/action

Es muss mit "echten" Präfixen wie funktionierenadminund im Idealfall die nackte URL/controller/action könnte umgeleitet werden/DEFAULT-LANGUAGE/controller/action.

Für mich funktioniert es jetzt in einer nachgerüsteten Anwendung, aber es war eine Art Hack, und ich muss die Sprachparameter in den meisten Links von Hand einfügen, was nicht gut ist.

Die Frage ist also zweifach:

Wie lassen sich Routen am besten strukturieren, sodass der Sprachparameter standardmäßig implizit enthalten ist, ohne dass er für jede neu definierte Route angegeben werden muss?Router::connect('/:controller/:action/*', ...) sollte implizit das Präfix enthalten.Der Parameter sollte in verfügbar sein$this->params['lang'] oder irgendwo ähnlich in ausgewertet werdenAppController::beforeFilter().Wie kommt manRouter::url() automatisch das Präfix in die URL aufnehmen, wenn nicht explizit angegeben?Router::url(array('controller' => 'foo', 'action' => 'bar')) sollte zurückkehren/en/foo/barSchon seitController::redirect(), Form::create() oder auchRouter::url() direkt das gleiche Verhalten haben müssen, ist das Überschreiben jeder einzelnen Funktion nicht wirklich eine Option.Html::image() Zum Beispiel sollte eine URL ohne Präfix erstellt werden.

Die folgenden Methoden scheinen aufzurufenRouter::url.

Controller::redirectController::flashDispatcher::__extractParams überObject::requestActionHelper::urlJsHelper::load_JsHelper::redirect_View::uuid, aber nur für eine Hash-Generation

Von diesen scheint es, dass die Controller- und Helper-Methoden außer Kraft gesetzt werden müssten, ich könnte ohne die lebenJsHelper. Meine Idee wäre, eine allgemeine Funktion in zu schreibenAppController oder vielleicht nur inbootstrap.php um das Einfügen von Parametern zu handhaben. Die überschriebenen Controller- und Helper-Methoden würden diese Funktion verwenden, ebenso wie ich, wenn ich manuell aufrufen wollteRouter::url. Wäre das ausreichend?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage