web-dev-qa-db-fra.com

Svelte PHP et paramètres GET

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

Par exemple, si je voulais utiliser ce qui suit:

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

Une affaire des lundis? Est-ce que j'y réfléchis? Merci d'avance!

51
Eric Arenson

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

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

$ app ici est une instance de Slim.

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'utiliseriez 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 la requête http://docs.slimframework.com/request/variables/

101
Martijn

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

Citer la documentation :

Vous pouvez obtenir les paramètres de requête sous forme de tableau associatif sur le fichier Demander un objet à l'aide de getQueryParams ().

Vous pouvez également obtenir une seule valeur de paramètre de requête, avec la valeur facultative par défaut value si le paramètre est manquant, à l'aide de getQueryParam ($ key, $ default = null).

20
vlp

J'ai corrigé mon api pour recevoir un paramètre url de corps json OR comme celui-ci.

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

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

3
Mulhoon

Dans Slim 3.0, cela 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'));
        // ...
    }
}
2
Tamas Kalman

_ {SI VOUS VOULEZ OBTENIR DES PARAMMES AVEC UN NOM DE PARAM} _

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

La méthode params () recherchera d'abord les variables PUT, puis les variables POST, puis les variables GET. Si aucune variable n'est trouvée, null est renvoyé. Si vous souhaitez uniquement rechercher un type de variable spécifique, vous pouvez utiliser ces méthodes à la place:

// --- variable GET

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

// --- POST variable

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

// --- variable PUT

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

_ {SI VOUS VOULEZ OBTENIR TOUS LES PARAMETRES DE LA DEMANDE SANS SPECIFIER LE NOM DU PARAM, VOUS POUVEZ LES TOUT entrer dans un tableau sous la forme Format => Valeur}

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

$ data sera un tableau contenant tous les champs de la requête comme ci-dessous

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

J'espère que ça vous aide!

1
KlevisGjN

Pas tout à fait au sujet de Slim PHP, mais si vous voulez accéder aux paramètres depuis une URL, utilisez le

$_SERVER['QUERY_STRING']

Vous trouverez plusieurs articles sur Google pour résoudre ce problème. Vous pouvez également utiliser la fonction PHP parse_url .

1
George P

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

0
Cengkuru Michael

Probablement évident pour la plupart des gens, mais juste au cas où, en partant de la réponse de vip concernant Slim 3 , vous pouvez utiliser quelque chose comme ce qui suit pour obtenir les valeurs des paramètres.

        $logger = $this->getService('logger');
        $params = $request->getQueryParams();
        if ($params)  {
            foreach ($params as $key => $param)     {
                if (is_array($param))   {
                    foreach ($param as $value)  {
                        $logger->info("param[" . $key . "] = " . $value);
                    }
                }
                else    {
                    $logger->info("param[" . $key . "] = " . $param);
                }
            }
        }
0
bkudrle