it-swarm.com.de

Schlank PHP und GET-Parameter

Ich spiele mit Slim PHP als Framework für eine RESTful-API, und bisher ist es großartig. Super einfach zu arbeiten, aber ich habe eine Frage, auf die ich keine Antwort finde. Wie kann ich in Slim PHP GET-Parameter von der URL abrufen?

Zum Beispiel, wenn ich Folgendes verwenden wollte:

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

Ein Fall der Montagen? Überlege ich es? Danke im Voraus!

51
Eric Arenson

Dies ist sehr einfach im Slim-Framework möglich. Sie können Folgendes verwenden:

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

$ app hier ist eine Slim-Instanz.

Oder wenn Sie genauer sein möchten

// GET-Parameter

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

// POST-Parameter

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

Sie würden es wie in einer bestimmten Route verwenden

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

Sie können die Dokumentation zum Anforderungsobjekt lesen http://docs.slimframework.com/request/variables/

101
Martijn

Für Slim 3 müssen Sie die Methode getQueryParams() für das PSR 7-Objekt Request verwenden.

Zitieren der Dokumentation :

Sie können die Abfrageparameter als assoziatives Array in der .__ abrufen. Objekt über getQueryParams () anfordern.

Sie können auch einen einzelnen Abfrageparameterwert mit dem optionalen Standardwert .__ erhalten. Wert, wenn der Parameter fehlt, mithilfe von getQueryParam ($ key, $ default = null).

20
vlp

Ich habe meine API repariert, um einen json body OR url Parameter wie diesen zu erhalten.

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

Dies mag nicht für jeden geeignet sein, aber es hat für mich funktioniert.

3
Mulhoon

In Slim 3.0 funktioniert auch Folgendes:

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

WENN SIE PARAMS MIT PARAMAMENT ERREICHEN WOLLEN

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

Die params () -Methode durchsucht zuerst PUT-Variablen, dann POST und dann GET-Variablen. Wenn keine Variablen gefunden werden, wird null zurückgegeben. Wenn Sie nur nach einem bestimmten Variablentyp suchen möchten, können Sie stattdessen diese Methoden verwenden:

// --- GET-Variable

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

// --- POST Variable

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

// --- PUT-Variable

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

WENN SIE ALLE PARAMETER VON ANFRAGE ERHALTEN MÜSSEN, OHNE DEN PARAM-NAMEN ANZUFÜGEN, SIE KÖNNEN ALLE ALLE IN FORMAT-SCHLÜSSEL AUFRUFEN => VALUE

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

$ data ist ein Array, das alle Felder der Anfrage enthält, wie unten angegeben

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

Hoffe es hilft dir!

1
KlevisGjN

Nicht sicher viel über Slim PHP, aber wenn Sie über eine URL auf die Parameter zugreifen möchten, sollten Sie Folgendes verwenden:

$_SERVER['QUERY_STRING']

Bei Google finden Sie eine Reihe von Blogbeiträgen, um dieses Problem zu lösen. Sie können auch die PHP Funktion parse_url verwenden.

1
George P

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

0

Wahrscheinlich für die meisten offensichtlich, aber für den Fall, dass Sie auf der Antwort von vip zu Slim 3 aufbauen, können Sie Folgendes verwenden, um die Werte für die Parameter abzurufen.

        $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