2014-05-20 18 views
13

Szukałem, ale nie znalazłem odpowiedzi. Mam RESTful API do zarządzania podstawowym CRUD. Próbuję utworzyć metodę aktualizacji przy użyciu PUT, ale nie mogę pobrać wartości parametrów. Używam Postman aby wnioski, moja prośba wygląda następująco:Uzyskaj parametry PUT ze 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') 
    ]); 
}); 

Moja var_dump() wynikiem jest:

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

Co jest nie tak? Dowolny pomysł?

+1

kasie podręcznik http://docs.slimframework.com/#Request-Body if przewiniesz w dół do sekcji Zmienne Żądania, gdzie znajduje się przykład. Alternatywnie możesz pobrać parametry bezpośrednio z treści i wstawić do var, wykonując 'parse_str (file_get_contents (" php: // input "), $ post_vars);' – mic

+0

Chcę przesłać obrazy w tej prośbie. Użycie aktualizacji "POST" jest złe? – bodruk

+1

Niestety, mój komentarz nie dotyczył danych "POST", skopiowałem kod z innej strony. Jednak dane PUT są ustawione w treści żądania, tak jak w przypadku wszystkich innych typów żądań oprócz GET (chociaż możesz być w stanie dołączyć łańcuch treści do żądania GET, nigdy go nie wypróbowałem). Możesz zrobić 'parse_str ($ app-> request-> getBody(), $ vars);' i zrób plik var_dump, aby zobaczyć twoje dane. – mic

Odpowiedz

20

Miałem ten sam problem. Po pierwsze, wysyłałem dane PUT z opcją Postman, aby zakodować je jako "dane formularzy", dlatego Slim nie otrzymywał wartości parametrów.

Jak wyjaśniono w W3, typ treści "wieloczęściowe/dane formularzy" należy stosować do przesyłania formularzy zawierających pliki, dane spoza ASCII i dane binarne.

W naszym przypadku musimy wysłać dane PUT z opcją Postman "x-www-form-urlencoded" (patrz wyjaśnienie "application/x-www-form-urlencoded" w W3).

Screenshot of the right Postman option selected

+2

Przełączono na x-www-form-urlencoded z listonoszem, aby działał! Dzięki za dobrze wyjaśnioną odpowiedź (link w3)! –

+1

Właśnie uratowałeś mi godziny bicia głowy. Dziękuję Ci! – Joel

+0

To tylko uratowało mi kolejne wyszukiwanie w Google! –

1

$app->request->put() zwraca wartość null ...

więc u można użyć zamiast próbować $app->request->params

Powiązane problemy