2010-03-16 33 views
11

Tôi đang cố trích xuất các tham số GET từ một URL REST của ZF. Nó không phải là yêu cầu hiện tại và tôi không muốn gọi URL hoặc thực hiện các tuyến đường, tôi chỉ cần các tham số. Tôi đang tìm một hàm tiện ích như parse_url(), nhưng đối với định dạng Zend REST. Có một cái hay tôi phải làm lại bánh xe?Làm cách nào để phân tích cú pháp URL Zend cho thông số?

Tôi đã thử một vài thứ như tạo một Zend_Controller_Request_Http mới nhưng các tham số không được phổ biến. Đây là URL HTTP hợp lệ.

Edit: Theo yêu cầu, một Zend URL mẫu:

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

Vì vậy, tôi chỉ cố gắng để có được param1 và param2 khỏi URL này.

Chỉnh sửa # 2: Tôi cố gắng này, nhưng nó dường như không làm việc:

$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)); 
+0

Làm thế nào về việc cung cấp URL? – hobodave

Trả lời

8

Làm thế nào về $uri = Zend_Uri::factory($yourUrl) '? Xem Zend_Uri.

Chỉnh sửa:
Ah, tôi hiểu ý của bạn bây giờ. Trong trường hợp đó, tôi tin rằng bạn nên thử những gì Gordon đề xuất. Chạy url của bạn thông qua phương thức match của tuyến đường của bạn.

Có lẽ là một cách để lấy đường từ router với một cái gì đó tương tự (không chắc chắn mặc dù):

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

Và sau đó làm semething như:

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

.. mà nên cung cấp bạn một mảng các tham số.

+1

Điều đó mang lại cho tôi một đối tượng Zend_Uri, nhưng sau đó tôi phải làm gì với đối tượng đó để lấy các tham số? getQuery() trả về false vì nó chỉ tìm kiếm một chuỗi truy vấn chuẩn (? param1 = foo & param2 = bar). – wizzard

+1

Tuyệt vời. Tôi vừa thay đổi getRoute ($ name) thành getCurrentRoute() và giải pháp này làm việc cho tôi. Cám ơn rất nhiều! – wizzard

+0

+1. xóa của tôi, upvoting ở đây. điều này đơn giản hơn nhiều. Chỉ cần một sidenote nhỏ: match() sẽ thay thế nội bộ $ yourURL bằng đối tượng request hiện tại nếu nó không phải là một cá thể của Zend_Controller_Request_Http để bắt đầu. – Gordon

8

Nếu bất cứ ai đến đây cố gắng để có được tất cả các params (bao gồm module/controller/action) từ một URL được lưu trữ xem xét các tuyến đường được xác định trên routes.ini của bạn, bạn nên:

/** 
* 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(); 
Các vấn đề liên quan