向CakePHP中的每个URL添加前缀(如语言参数)的最干净方法是什么?
http://example.com/en/controller/action
http://example.com/ru/admin/controller/action
它需要使用像
admin
这样的“真实”前缀,并且理想情况下,裸URL /controller/action
可以重定向到/DEFAULT-LANGUAGE/controller/action
。现在,它正在为我 retrofit 的应用程序中工作,但这有点像hack,我需要在大多数链接中手动添加language参数,这不好。
因此,问题是双重的:
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
也会使用该功能。这样就足够了吗?
最佳答案
IRC的rchavik建议使用此链接:CakePHP URL based language switching for i18n and l10n internationalization and localization
通常,解决方案可能是重写Helper::url
。
关于cakephp - 为CakePHP中的每个URL添加一个前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1794412/