2011-11-14 34 views
43

Tôi đang phát bằng PHP Slim làm khuôn khổ cho API RESTful, và cho đến giờ thật tuyệt vời. Siêu dễ dàng để làm việc với, nhưng tôi có một câu hỏi tôi không thể tìm thấy câu trả lời. Làm cách nào để lấy tham số GET từ URL trong PHP PHP?Tham số PHP và GET mỏng

Ví dụ, nếu tôi muốn sử dụng như sau:

http://api.example.com/dataset/schools?zip=99999&radius=5 

Một trường hợp trình ngày Thứ Hai? Tôi có bị lật đổ không? Cảm ơn trước!

+1

Đây không phải là GET params ?? Bạn có chắc không? – Galled

+0

Blerg! Ý tôi là GET, không phải POST, xin lỗi. –

+0

Biến số $ _GET như thế nào? Không hoạt động? – Galled

Trả lời

93

Bạn có thể làm điều này rất dễ dàng trong khuôn khổ Slim, bạn có thể sử dụng:

$paramValue = $app->request()->params('paramName'); 

$ ứng dụng ở đây là một trường hợp Slim.

Hoặc nếu bạn muốn cụ thể hơn

// GET tham số

$paramValue = $app->request()->get('paramName'); 

// POST tham số

$paramValue = $app->request()->post('paramName'); 

Bạn sẽ sử dụng nó như vậy trong một lộ trình cụ thể

$app->get('/route', function() use ($app) { 
      $paramValue = $app->request()->params('paramName'); 
}); 

Bạn có thể đọc tài liệu về đối tượng yêu cầu http://docs.slimframework.com/request/variables/

+0

Cảm ơn bạn rất nhiều. Câu trả lời của bạn đã giúp tôi giải quyết vấn đề của mình. – Dibish

+0

Vâng, chúng tôi có thể đọc và đọc tài liệu nhưng câu trả lời của bạn giải thích tốt hơn nhiều;) – Pathros

2

Không chắc nhiều về Slim PHP, nhưng nếu bạn muốn truy cập vào các thông số từ một URL thì bạn nên sử dụng:

$_SERVER['QUERY_STRING'] 

Bạn sẽ tìm thấy một loạt các bài đăng trên blog trên Google để giải quyết việc này. Bạn cũng có thể sử dụng hàm PHP parse_url.

+0

George P và lửa là đúng, tôi chỉ phải sử dụng $ _GET ['var']. Tôi nghĩ có lẽ vì định tuyến dựng sẵn của SlimPHP tôi phải làm điều gì đó lạ mắt, nhưng không. Tốt cũ thời $ _GET [] hoạt động tốt. Chỉ cần overthinking nó - cảm ơn guys! –

+0

Tôi khuyên bạn nên gắn bó với $ app-> request-> get ('paramName'); thậm chí tho điều này không hoạt động. – Alex

+0

@ Alex bạn có thể giải thích tại sao bạn nên giới thiệu điều đó không? – Holonaut

3

Tôi đã sửa lỗi api của mình để nhận thân thể json hoặc tham số url như thế này.

$data = json_decode($request->getBody()) ?: $request->params(); 

Điều này có thể không phù hợp với tất cả mọi người nhưng nó phù hợp với tôi.

1

NẾU BẠN MUỐN GET params VỚI PARAM TÊN

$value = $app->request->params('key'); 

Các params() phương pháp đầu tiên sẽ tìm kiếm PUT biến, sau đó POST biến, sau đó biến GET. Nếu không tìm thấy biến nào, null được trả về.Nếu bạn chỉ muốn tìm kiếm một loại hình cụ thể của biến, bạn có thể sử dụng các phương pháp này thay vì:

// --- GET biến biến

$paramValue = $app->request->get('paramName'); 

// --- POST

$paramValue = $app->request->post('paramName'); 

// --- PUT biến

$paramValue = $app->request->put('paramName'); 

NẾU BẠN MUỐN GET ALL THÔNG SỐ TỪ YÊU CẦU mà không chỉ định PARAM TÊN, BẠN CÓ THỂ LẤY tất cả chúng vào mảng trong FORMAT KEY => VALUE

$data = json_decode($app->request->getBody()) ?: $app->request->params(); 

$ dữ liệu sẽ là một mảng mà chứa tất cả các trường từ yêu cầu dưới đây

$data = array(
    'key' => 'value', 
    'key' => 'value', 
    //... 
); 

Hy vọng nó sẽ giúp bạn!

10

Đối với Slim 3 bạn cần sử dụng phương pháp getQueryParams() trên đối tượng PSR 7 Request.

Trích dẫn the documentation:

Bạn có thể nhận được các thông số truy vấn như một mảng kết hợp trên đối tượng Yêu cầu sử dụng getQueryParams().

Bạn cũng có thể nhận được một giá trị tham số truy vấn, với giá trị mặc định tùy chọn nếu tham số bị thiếu, sử dụng getQueryParam ($ key, $ default = null).

+1

Cảm ơn bạn đã đăng bài này. Rất khó để tìm câu hỏi và câu trả lời có liên quan đến Slim 3. –

0

Sử dụng $id = $request->getAttribute('id'); //where id is the name of the param

0

Trong Slim 3.0 sau đây cũng làm việc:

routes.php

require_once 'user.php'; 

$app->get('/user/create', '\UserController:create'); 

user.php

class UserController 
{ 
    public function create($request, $response, array $args) 
    { 
     $username = $request->getParam('username')); 
     $password = $request->getParam('password')); 
     // ... 
    } 
} 
Các vấn đề liên quan