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