我正在阅读有关路由的CakePHP文档,但我还是无法掌握它。
我想要实现的目标是:
修改
最后,我创建了我的应用程序逻辑,如果只定义了1种语言,则没有语言前缀,如果有更多语言,则会生成带有语言前缀的链接(通过覆盖html帮助程序)和路由将是不同的。否则,当我尝试定义单语言版本路由(没有前缀)时总会出现问题。这是我现在可以使用的代码:
(应用程序/配置/ routes.php文件)
/*
* ===================== Input start ===================== *
*/
/**
* Default language
*/
Configure :: write('Config.language', 'mkd');
/**
* Application languages
*/
Configure :: write('Config.languages', array(
'mkd' => 'Македонски',
'eng' => 'English',
));
/**
* ====================== Input end ====================== *
*/
/**
* Counting languages...
*/
Configure :: write('Config.languageCount', count(Configure :: read('Config.languages')));
/**
* If application is multilingual
*/
if(Configure :: read('Config.languageCount') > 1) {
Router::connect('/:language/:controller/:action/*',
array(),
array('language' => implode('|', array_keys( Configure :: read('Config.languages') )))
);
Router::connect('/:language/:controller/*',
array('action' => 'frontend'),
array('language' => implode('|', array_keys( Configure :: read('Config.languages') )))
);
}
/**
* If application has one language
*/
else {
Router::connect('/:controller/*', array('action' => 'frontend'));
}
感谢Dave和kicaj的帮助,您的帮助简化了我的方法。
答案 0 :(得分:2)
您可能希望使用正则表达式 - 类似这样:
Router::connect(
'/:language/:controller/:action/*',
array(),
array('language'=>'[a-z]{3}'
));
注意第三个参数,它为:language
提供了名称和正则表达式规则。
然后,您的控制器中可以使用它(您可能会在AppController的beforeFilter()
中使用):
$this->request->params['language']