在 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
,但仅适用于哈希生成
其中似乎需要重写 Controller 和 Helper 方法,我可以在没有JsHelper
. 我的想法是编写一个通用函数,AppController
或者只是bootstrap.php
为了处理参数插入。重写的 Controller 和 Helper 方法将使用此函数,如果我想手动调用Router::url
. 这足够了吗?