Как разобрать Zend URL для параметров? - PullRequest
11 голосов
/ 17 марта 2010

Я пытаюсь извлечь параметры GET из URL ZF REST. Это не текущий запрос, и я не хочу называть URL или выполнять маршрут, мне просто нужны параметры. Я ищу полезную функцию, такую ​​как parse_url (), но для формата Zend REST. Есть ли один, или я должен заново изобрести колесо?

Я пробовал несколько вещей, таких как создание нового Zend_Controller_Request_Http, но параметры не заполняются. Это действительный URL-адрес HTTP.

Редактировать: по запросу образец URL Zend:

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

Так что я просто пытаюсь извлечь param1 и param2 из этого URL.

Редактировать # 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));

Ответы [ 2 ]

8 голосов
/ 17 мая 2011

Если кто-то пришел сюда, пытаясь получить все параметры (включая модуль / контроллер / действие) с сохраненного URL-адреса с учетом маршрутов, определенных в вашем rout.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 голосов
/ 17 марта 2010

Как насчет $uri = Zend_Uri::factory( $yourUrl ) '? См. Zend_Uri .

Edit:
Ах, теперь я понимаю, что вы имеете в виду. В этом случае я считаю, что вы должны попробовать то, что предложил Гордон. Запустите ваш URL через match метод вашего маршрута.

Вероятно, есть способ получить маршрут от маршрутизатора с помощью чего-то вроде (хотя не уверен):

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

А затем сделайте что-то вроде:

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

.. который должен дать вам массив параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...