繁体   English   中英

语言和路由

[英]Languages and routing

我正在阅读关于路由的CakePHP文档,但目前还无法掌握。

我要实现的是:

  • 它应该在控制器参数前面有和没有语言参数的情况下都可以工作。
  • 如果未给出操作,则应转到前端操作(此函数还具有输入变量)。

编辑

最后,我提出了我的应用程序逻辑,即如果仅定义了一种语言,则将没有语言前缀,如果有更多语言,则将使用语言前缀(通过覆盖html helper)生成链接,并且路由将不一样 否则,当我尝试定义单一语言版本路由(无前缀)时,总会出现问题。 这是我现在可以使用的代码:

(应用程序/配置/ 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的帮助,您的帮助简化了我的处理方法。

您可能需要改用正则表达式-像这样:

Router::connect(
    '/:language/:controller/:action/*',
    array(),
    array('language'=>'[a-z]{3}'
));

请注意第三个参数,该参数为:language提供名称和正则表达式规则。

然后,它将在您的Controllers中可用(您可能会在AppController的beforeFilter() ):

$this->request->params['language']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM