向CakePHP中的每个URL(如语言参数)添加前缀的最简单方法是什么?向CakePHP中的每个URL添加前缀
http://example.com/en/controller/action
http://example.com/ru/admin/controller/action
它需要用“真实”的前缀工作就像admin
,理想的裸URL /controller/action
会被重定向到/DEFAULT-LANGUAGE/controller/action
。
它现在适用于我的复古应用程序,但它有点破解,我需要在大多数链接中手动包含语言参数,这并不好。
所以现在的问题是双重的:
- 什么是结构化路线的最好方式,所以语言参数隐含默认包含无需为每个新定义的路由来指定?
Router::connect('/:controller/:action/*', ...)
应隐式包含前缀。- 该参数应在
$this->params['lang']
或类似于在AppController::beforeFilter()
评估的地方可用。
- 如何获得
Router::url()
自动在URL中包含前缀,如果没有明确指定?Router::url(array('controller' => 'foo', 'action' => 'bar'))
应该返回/en/foo/bar
- 由于
Controller::redirect()
,Form::create()
甚至Router::url()
直接需要有相同的行为,覆盖每一个功能是不是一个真正的选择。例如,Html::image()
应该产生一个无前缀的URL。
下面的方法似乎在呼吁Router::url
。
Controller::redirect
Controller::flash
Dispatcher::__extractParams
经由Object::requestAction
Helper::url
JsHelper::load_
JsHelper::redirect_
View::uuid
,但仅用于一个散列生成
在这些似乎控制器和帮助器的方法将需要重写,我可以生活没有JsHelper
。我的想法是在AppController
中编写一个通用函数,或者可能只是在bootstrap.php
中处理参数插入。重写的Controller和Helper方法将使用此函数,因为如果我想手动调用Router::url
。这会足够吗?从IRC
并根据意见,压倒一切'的AppController :: url'会为控制器做。到目前为止,还有其他的东西吗?其他部分是否直接调用'Router :: url'? – deceze 2009-11-25 04:46:06