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

CakePHP3 routing: pass static variable to controller action

我试图将 "language" 参数从 CakePHP3 路由传递到操作,这样我就可以为这些页面设置语言。

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

我让它工作的唯一方法是使用这样的动态参数:

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

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

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

我认为这应该是在 CakePHP3 中执行此操作的另一种最佳方法,但我找不到它。

谢谢!

如果您不希望它是动态的,那么您需要在默认情况下传递它,即与控制器和操作一起传递:

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

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

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

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

另见