我正在尝试让以下路线工作:
$router->add('/([a-z]{2})/:namespace/:controller/:action/([^'/]+)', array(
'language' => 1,
'namespace' => 2,
'controller' => 3,
'action' => 4,
'location' => 5
))->setName('location');
Volt 模板中的相关(仅用于测试目的)行如下所示:
{{ url({'for': 'location', 'namespace': 'weather', 'controller': 'forecast', 'action': 'precipitation', 'location': 'Hamburg' }) }}
我想要的是//天气/预报/降水/汉堡,但我得到的只是//天气/预报/降水/。
我尝试的下一件事是
$router->add('/([a-z]{2})/:namespace/:controller/:action/{location:[^'/]+}', array(
'language' => 1,
'namespace' => 2,
'controller' => 3,
'action' => 4,
))->setName('location');
这至少给了我在 URL 中的位置,但位置完全错误://汉堡/预测/降水/。
现在我已经查看了库''Mvc''路由器,传递给 get() 的数组对我来说看起来不错:
Array
(
[for] => location
[namespace] => weather
[controller] => forecast
[action] => precipitation
[location] => Hamburg
[language] => en
)
我将使用我自己的路由器来处理翻译后的 URL,所以我认为我们现在可以忽略语言参数。到目前为止,自定义路由器只执行调用原始路由器的功能。
知道如何让位置参数工作吗?
我已经测试了路由器文档中给出的所有可能性,甚至查看了 Phalcon 2.0 的路由器实现(您使用的是这个版本,对吧?!唯一可行的是根本不使用命名参数,甚至需要从路由模式中删除内置占位符:
$this->add('/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_]+)/([^'/]+)', array(
'namespace' => 1,
'controller' => 2,
'action' => 3,
'location' => 4,
))->setName('location');
换句话说,这对我来说似乎是一个错误。请随时提交错误以进一步调查。
关于语言参数,我不知道你是否已经看到了这个问题,但你可以用类似的方式处理这个问题。