gpt4 book ai didi

php - 使用 Zend Framework 中的 Zend_Controller_Router_Route_Regex 将多个 URL 与参数匹配

转载 作者:可可西里 更新时间:2023-11-01 12:33:53 26 4
gpt4 key购买 nike

我正在使用 Zend 开发 Rest Controller,我对 url 到路由器的映射感到困惑。

基本上我阅读了有关 Zend Router 的信息,但我无法规划我的 url 以满足上述路线。

这些是我的一些应该映射到路由器的 url。

  1. http://localhost/api/v1/tags.xml

  2. http://localhost/api/v1/tags.xml?abc=true(参数:abc=true)

  3. http://localhost/api/v1/tags/123456.xml(参数:123456.xml)

  4. http://localhost/api/v1/tags/123456/pings.xml(参数:123456,pings.xml)

  5. http://localhost/api/v1/tags/123456/pings.xml?a=1&b=2(参数:123456,pings.xml,a=1,b=2)

  6. http://localhost/api/v1/tags/123456/pings/count.xml(参数:123456、pings、count.xml)

我的计划是,对于 url 模式 1 到 3,“tags”应该是 Controller ,对于 url 模式 4 到 6,“pings”应该是 Controller 。

现在我不确定如何配置路由器才能使上述场景正常工作。请注意,我无法更改这些网址。我可以为好的答案提供 100 的信誉分数。

最佳答案

前两个 URL 可以组合到一个路由器。

$r = new Zend_Controller_Router_Route_Regex('api/v1/tags.xml',
array('controller' => 'tags', 'action' => 'index'));
$router->addRoute('route1', $r);

要区分前两个路由,请检查标签 Controller 中是否存在 abc 参数。在您的标签 Controller 、索引操作中添加以下内容。

if($this->_getParam('abc') == "true")
{
//route 2
} else {
// route 1
}

同样,路线4和路线5也可以合并为一条路线。

我已经针对路线 6 进行了解释。对于路线 3,您可以使用相同的逻辑。

$r = new Zend_Controller_Router_Route_Regex('api/v1/tags/(.*)/pings/(.*)',
array('controller' => 'pings', 'action' => 'index'),
array(1 => 'param1',2=>'param2')
);
$router->addRoute('route6', $r);

然后可以在 pings Controller 中像下面这样访问参数。

$this->_getParam('param1') and $this->_getParam('param2')

对于路线 5:

$r = new Zend_Controller_Router_Route_Regex('api/v1/tags/(.*)/pings.xml',
array('controller' => 'pings', 'action' => 'index'),
array(1 => 'param1')
);
$router->addRoute('route5', $r);

参数(URL 中 ? 之后的部分)不会在路由器中处理。默认情况下,它们将传递给您的 Controller 。

要获取在您的 URL 中传递的特定参数值,请在您的 Controller 中使用以下内容。

$this->_getParam('a');

逻辑是在你的路由中使用 (.*) 并为它们分配一个参数名称并在你的 Controller 中访问它们

关于php - 使用 Zend Framework 中的 Zend_Controller_Router_Route_Regex 将多个 URL 与参数匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5152502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com