Phalcon URL生成器混合自定义路由中的参数

时间:2014-12-10 17:54:56

标签: php phalcon phalcon-routing

我正在尝试使用以下路线:

$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');

至少给了我在网址中的位置,但位置完全错误: //汉堡/预测/降水/

现在我查看了Library \ Mvc \ Router,传递给 get()的数组对我来说很好看:

Array
(
    [for] => location
    [namespace] => weather
    [controller] => forecast
    [action] => precipitation
    [location] => Hamburg
    [language] => en
)

我将使用自己的路由器处理已翻译的URL,因此我认为我们现在可以忽略语言参数。到目前为止,自定义路由器只会调用原始路由器。

知道如何让location参数起作用吗?

1 个答案:

答案 0 :(得分:0)

我已经测试了路由器文档中给出的所有可能性,甚至可以查看router implementation中的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');

换句话说,这对我来说似乎是个错误。请随意file a bug进一步调查。

关于语言参数,我不知道你是否已经看过this question,但你可以用类似的方式处理这个问题。