2014-05-20 13 views
13

Ich suchte, aber ich habe keine Antwort gefunden. Ich habe eine RESTful-API, um eine grundlegende CRUD zu verwalten. Ich versuche, eine Update-Methode mit PUT zu erstellen, aber ich kann die Params-Werte nicht abrufen. Ich verwende Postman, um die Anfragen zu machen, meine Anfrage wie folgt aussieht:Get PUT Params mit Slim PHP

URL

http://localhost/api/update/987654321 

Params

id = 987654321 
name = John Smith 
age = 35 

PHP

$app = new Slim(); 
$app->put('/update/:id', function($id) use($app){ 
    var_dump([ 
     'id' => $id, 
     'name' => $app->request->put('name'), 
     'age' => $app->request->put('age') 
    ]); 
}); 

Mein var_dump() Ergebnis ist:

array(3) { 
    ["id"]=> 
    string(9) "987654321" 
    ["name"]=> 
    NULL 
    ["age"]=> 
    NULL 
} 

Was ist falsch? Irgendeine Idee?

+1

Kasse das Handbuch verwenden versuchen http://docs.slimframework.com/#Request-Body wenn scrollen Sie nach unten zum Bereich Anforderungsvariablen, dort ist ein Beispiel. Alternativ können Sie die Parameter direkt aus dem Körper nehmen und in var einfügen, indem Sie 'parse_str (file_get_contents (" php: // input "), $ post_vars);' – mic

+0

Ich möchte Bilder in diese Anfrage hochladen. '' '' POST''' zu aktualisieren ist eine schlechte Praxis? – bodruk

+1

Entschuldigung mein Kommentar war nicht über 'POST' Daten, ich kopierte den Code von einer anderen Seite. Allerdings werden die PUT-Daten im Hauptteil der Anfrage wie bei allen anderen Anfragetypen außer GET gesetzt (obwohl Sie möglicherweise eine Body-Zeichenfolge an eine GET-Anfrage anhängen können, ich habe es noch nie versucht). Sie könnten 'parse_str ($ app-> request-> getBody(), $ vars);' machen und einen var_dump ausführen, um Ihre Daten zu sehen. – mic

Antwort

20

Ich hatte das gleiche Problem. Erstens habe ich PUT-Daten mit der Postman-Option gesendet, um sie als "Formulardaten" zu codieren, deshalb hat Slim die param-Werte nicht bekommen.

Wie in W3 erläutert, sollte der Inhaltstyp "multipart/form-data" zum Übermitteln von Formularen verwendet werden, die Dateien, Nicht-ASCII-Daten und Binärdaten enthalten.

In unserem Fall müssen wir PUT-Daten mit der Postman-Option "x-www-form-urlencoded" senden (siehe Erklärung von "application/x-www-form-urlencoded" in W3).

Screenshot of the right Postman option selected

+2

Geschaltet zu x-www-form-urlencoded mit Briefträger, damit es funktioniert! Danke für die gut erklärte Antwort (w3 link)! –

+1

Du hast mir gerade Stunden Kopfschaden gerettet. Vielen Dank! – Joel

+0

Das hat mir gerade eine andere Google-Suche gerettet! –

1

$app->request->put() wird ein Null-Wert zurück ...

so kann u $app->request->params statt