【发布时间】:2017-10-08 18:56:46
【问题描述】:
我有一个简单的路由设置来处理不同的语言。目标是将语言作为 URL 中的第一个参数,例如 /en/docs 或 /de/docs。语言定义设置为scopes,如下所示:
$builder = function ($routes)
{
$routes->connect('/:controller', ['action' => 'index']);
$routes->connect('/:controller/:action/*', ['action' => 'index']);
};
$languages = ['en', 'de'];
foreach ($languages as $lang) {
Router::scope('/'.$lang, ['language' => $lang], $builder);
}
Router::addUrlFilter(function ($params, $request) {
if ($request->param('language')) {
$params['language'] = $request->param('language');
}
else {
$params['language'] = 'en';
}
return $params;
});
每个范围都按预期工作。即使有一些更复杂的连接和前缀(我从上面的代码中删除了它们以使代码更具可读性)。
现在的问题是:如何创建链接以在语言(范围)之间切换?
我尝试了不同的url,但是根据当前的url(例如/de/docs),语言参数对创建的url没有任何影响:
Router::url(['language' => 'en', 'controller' => 'docs']);
// -> /de/docs (expected: /en/docs)
Router::url(['language' => 'de', 'controller' => 'docs']);
// -> /de/docs
如何修复路由以获取预期的 url?
【问题讨论】:
标签: php cakephp routes cakephp-3.x