问题 如何解析参数的Zend URL?


我试图从ZF REST URL中提取GET参数。这不是当前的请求,我不想调用URL或执行路由,我只需要参数。我正在寻找像parse_url()这样的实用程序函数,但是对于Zend REST格式。有一个,还是我必须重新发明轮子?

我尝试了一些事情,比如创建一个新的Zend_Controller_Request_Http,但参数没有被填充。它是一个有效的HTTP URL。

编辑:根据请求,Zend URL示例:

http://localhost/index/index/param1/foo/param2/bar

所以我只是试图从这个URL中获取param1和param2。

编辑#2:我试过这个,但它似乎不起作用:

$request = new Zend_Controller_Request_Http('http://localhost/home/test/param1/foo/param2/bar');
$front = Zend_Controller_Front::getInstance();
$route = new Zend_Rest_Route($front);
var_dump($route->match($request));

13110
2018-03-16 22:11


起源

如何提供URL? - hobodave


答案:


怎么样 $uri = Zend_Uri::factory( $yourUrl )'?看到 使用Zend_Uri

编辑:
啊,我明白你的意思了。在那种情况下,我相信你应该尝试戈登的建议。运行你的网址 match 你的路线的方法。

可能有一种方法可以从路由器中检索路由(不确定):

$route = Zend_Controller_Front::getInstance()
                              ->getRouter()
                              ->getRoute( 'theRouteName' );

然后做一些像:

$params = $route->match( $yourUrl );

..应该给你一个参数数组。


8
2018-03-16 22:16



这给了我一个Zend_Uri对象,但是我该如何处理该对象来获取参数呢? getQuery()返回false,因为它只查找标准查询字符串(?param1 = foo&param2 = bar)。 - wizzard
真棒。我刚刚将getRoute($ name)改为getCurrentRoute(),这个解决方案适合我。非常感谢! - wizzard
+1。删除我的,在这里upvoting。这要简单得多。只是一个小的旁注:如果不是Zend_Controller_Request_Http的实例,match()将在内部用当前请求对象替换$ yourURL。 - Gordon


如果有人来到这里尝试从存储的URL中获取所有参数(包括模块/控制器/操作),考虑到routes.ini上定义的路由,您应该:

/**
 * Code kept big just for example purposes
 * Creates a request object, route and injects back the properties parsed
 */
$url = 'http://www.site.com/module/controller/action/param1/test';
$request = new Zend_Controller_Request_Http($url);
Zend_Controller_Front::getInstance()->getRouter()->route($request);

// Module name
$request->getModuleName();

// Controller name
$request->getControllerName();

// Action name
$request->getActionName();

// All parameters
$request->getParams();

8
2018-05-17 14:29