0

只有在不为空时才使用带有参数的 CakePHP 路由有一些解决方案吗?

现在我在下面编码,但我想要一些更好的:

if(Configure::read('Config.language') !== 'en') { // en is default language
    $language = '/:language';
} else {
    $language = '';
}

Router::connect($language .'/'. __('register', true), array(
    'controller' => 'users',
    'action' => 'register'));

此代码完美运行,但我仍然必须通过 url() 方法在 AppHelper 中设置语言。

在较旧的应用程序中,我总是重复 Router::connect:

Router::connect('/:language/'. __('register', true), array(
    'controller' => 'users',
    'action' => 'register')); // for all languages without default language
Router::connect('/'. __('register', true), array(
    'controller' => 'users',
    'action' => 'register')); // only for default language (en)

也许有最简单的解决方案?

4

2 回答 2

4

您需要使用 2 条路线,但为基于语言的路线添加“持久”选项。添加 'persist' 将避免每次生成 url 时都必须指定 'language' 键。

// for all languages without default language. 
Router::connect(
    '/:lang/'. __('register', true),
    array(
        'controller' => 'users', 
        'action' => 'register'
    ), 
    array(
        'persist' => array('lang')
    )
);

// only for default language (en)
Router::connect(
    '/'. __('register', true),
    array(
        'controller' => 'users', 
        'action' => 'register'
    )
); 

您可能还想查看CakeDC 的 I18n插件。

于 2013-01-20T18:02:23.750 回答
0

好的,这些东西效果更好,但我还有其他问题。

我在 bootstrap.php 中将默认语言设置Configure::write('Config.language');为 en

接下来我为这样的 url 写了 shema:

Router::connect('/:language/'. __('register', true), array('controller' => 'users', 'action' => 'register'), array('persist' => array('lang')));
Router::connect('/'. __('register', true), array('controller' => 'users', 'action' => 'register')); 

当用户通过 AppController 中的 beforeFilter 更改语言(设置新的 Config.language)时,静态 .po 和 db 中的内容将正常工作,但链接未翻译。参数有效,:language但魔术功能无效。__()Router:connect()

因为首先加载的是 bootstrap.php,接下来是 router.php,最后是 AppController.php

我的问题是,如何强制 router.php 翻译链接(__())?

对不起,但还是要学英语...

于 2013-01-22T07:54:26.733 回答