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
选项传递。
另见
我试图将 "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
选项传递。
另见