2011-11-14 6 views
43

Je joue avec Slim PHP en tant que framework pour une API RESTful, et jusqu'à présent, c'est génial. Super facile de travailler avec, mais j'ai une question à laquelle je ne trouve pas de réponse. Comment puis-je récupérer des paramètres GET à partir de l'URL dans Slim PHP?Paramètres PHP et GET minces

Par exemple, si je voulais utiliser ce qui suit:

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

Un cas du lundi? Suis-je en train de le penser? Merci d'avance!

+1

Ce ne sont pas des paramètres GET ?? Êtes-vous sûr? – Galled

+0

Blerg! Je voulais dire GET, pas POST, désolé. –

+0

Que diriez-vous de la variable $ _GET? Ne fonctionne pas? – Galled

Répondre

93

Vous pouvez le faire très facilement dans le cadre Slim, vous pouvez utiliser:

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

app $ est une instance Slim ici.

Ou si vous voulez être plus précis

// paramètre GET

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

// paramètre POST

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

Vous l'utiliser comme si dans un itinéraire spécifique

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

Vous pouvez lire la documentation sur l'objet de requête http://docs.slimframework.com/request/variables/

+0

Merci beaucoup. Votre réponse m'a aidé à résoudre mon problème. – Dibish

+0

Ouais, nous pouvons aller lire les docs mais votre réponse explique beaucoup mieux;) – Pathros

2

Je ne sais pas beaucoup sur Slim PHP, mais si vous voulez accéder aux paramètres à partir d'une URL, vous devez utiliser le:

$_SERVER['QUERY_STRING'] 

Vous trouverez un tas de messages de blog sur Google pour résoudre ce problème. Vous pouvez également utiliser la fonction PHP parse_url.

+0

George P et le feu ont raison, je devais juste utiliser $ _GET ['var']. Je pensais que peut-être à cause du routage intégré de SlimPHP je devrais faire quelque chose de fantaisie, mais non. Good old fashioned $ _GET [] fonctionne très bien. Juste trop réfléchir - merci les gars! –

+0

Je recommanderais de coller à $ app-> request-> get ('paramName'); Même cela fonctionne. – Alex

+0

@Alex pouvez-vous expliquer pourquoi vous recommandez cela? – Holonaut

3

J'ai corrigé mon API pour recevoir un paramètre json body OU url comme ceci.

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

Cela pourrait ne pas convenir à tout le monde mais cela a fonctionné pour moi.

1

SI VOUS VOULEZ méthode GET PARAM AVEC PARAM NOM

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

Les params() recherche d'abord PUT des variables, puis les variables POST, puis les variables GET. Si aucune variable n'est trouvée, null est renvoyé.Si vous voulez seulement rechercher un type spécifique de variable, vous pouvez utiliser ces méthodes au lieu:

// --- GET variables

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

// --- POST variables

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

// --- PUT variables

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

SI VOUS VOULEZ VOUS LES PARAMÈTRES DE DEMANDE SANS PRECISER NOM PARAM, vous pouvez obtenir tous en MATRICE EN FORMAT KEY => VALEUR

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

$ données seront un tableau contient tous les champs de la demande comme ci-dessous

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

Espérons que cela vous aide!

10

Pour Slim 3 vous devez utiliser la méthode getQueryParams() sur l'objet PSR 7 Request.

Citant the documentation:

Vous pouvez obtenir les paramètres de la requête dans un tableau associatif sur l'objet de demande à l'aide getQueryParams().

Vous pouvez également obtenir une seule valeur de paramètre de requête, avec une valeur par défaut en option si le paramètre est absent, en utilisant getQueryParam ($ key, $ default = null).

+1

Merci de poster ceci. Il est très difficile de trouver des questions et des réponses pertinentes pour Slim 3. –

0

Utilisez $id = $request->getAttribute('id'); //where id is the name of the param

0

Slim 3.0 qui suit fonctionne aussi:

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')); 
     // ... 
    } 
}