【问题标题】:Phalcon URL generator mixes parameters in custom routePhalcon URL 生成器在自定义路由中混合参数
【发布时间】:2014-12-10 17:54:55
【问题描述】:

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

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

我想要的是 //weather/forecast/precipitation/Hamburg,但我得到的却是 //weather/forecast/precipitation/

接下来我尝试的是

$router->add('/([a-z]{2})/:namespace/:controller/:action/{location:[^\/]+}', array(
    'language' => 1,
    'namespace' => 2,
    'controller' => 3,
    'action' => 4,
))->setName('location');

这至少给了我 URL 中的位置,但位置完全错误://Hamburg/forecast/precipitation/

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

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

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

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

【问题讨论】:

    标签: php phalcon phalcon-routing


    【解决方案1】:

    我已经测试了路由器文档中给出的所有可能性,甚至查看了 Phalcon 2.0 的router implementation(您使用的是这个版本,对吗?!)。唯一解决的办法是根本不使用命名参数,甚至需要从路由模式中删除内置占位符:

    $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,不过你可以用类似的方式处理。

    【讨论】:

    • 完美,谢谢!当我找到时间时,我会提交一个错误报告。我看到了你关于语言参数的帖子,这正是我所拥有的。我们还使用翻译后的 URL,因此我们的路由器中有更多代码。目前我们仍在使用 Phalcon 1.3。
    猜你喜欢
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多