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!
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/
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).
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.
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'));
// ...
}
}
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!
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.
Verwenden Sie $id = $request->getAttribute('id'); //where id is the name of the param
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);
}
}
}