CakePHP3路由:将静态变量传递给控制器​​动作

时间:2017-11-12 20:22:11

标签: cakephp routing internationalization cakephp-3.0

我试图传递"语言"从CakePHP3路线到动作的参数,所以我可以为这些页面设置语言。

$routes->connect('/es/hola', ['controller' => 'StaticPages', 'action' => 'welcome']);
$routes->connect('/en/hello', ['controller' => 'StaticPages', 'action' => 'welcome']);

我可以使用这样的dinamyc参数:

$routes->connect('/:lang/hola', ['controller' => 'StaticPages', 'action' => 'welcome'], ['pass' => ['lang']]);

但问题是这条路线会匹配:

/en/hola
/es/hello
...
/fr/hello

我认为这可能是在CakePHP3中做到这一点的另一种最佳方式,但我无法找到它。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您不希望它是动态的,那么您需要将其传递给默认值,即与控制器和操作一起传递:

$routes->connect(
    '/es/hola',
    [
        'controller' => 'StaticPages',
        'action' => 'welcome',
        'lang' => 'es'
    ]
);

在控制器中,参数将通过请求对象提供:

$lang = $this->request->getParam('lang'); // param('lang') before CakePHP 3.4

如果您希望将其作为参数传递给控制器​​操作,您仍然可以将其定义为通过pass选项传递。

另见