2016-10-26 5 views
0

Я добавил маршрут для обновления электронной почты в базе данных, которая использует метод PUTТонкий метод v3 PUT и извлекать данные POST

$app->put('/notifications/{email}', 'add_email_address');

и функцию он выглядит:

function add_email_address($request, $response, $args) { 

    $email = $args['email']; 
    $addon_email = $request->getParam('addon_email', null); 

    echo "ADD/UPDATE $email with $addon_email"; 

} 

UPDATE как-то при тестировании метода PUT с сообщением ввода формы addon_email = [email protected] полученное значение для $addon_email пусто;

Любые советы, что я делаю неправильно?

ответ

0

Я получил его на работу, изменяя

$addon_email = $app->request->getParam('addon_email', null);

в

$allPostPutVars = $request->getParsedBody(); 
$addon_email = $allPostPutVars['addon_email']; 

Похоже getParam работает только для метода GET. Также должен быть указан контент-тип как x-www-form-urlencoded

0

Вы должны использовать $request->getParams(), чтобы получить массив всех POST/PUT параметров, или вы можете использовать $reqeuest->getParam('key', 'defaultValue'), где 'key' это имя и параметра Я 'defaultValue' ... хорошо, значение по умолчанию в параметре случае отсутствует.

Так,

function add_email_address($request, $response, $args) { 

    $email = $args['email']; 
    $addon_email = $app->request->getParam('addon_email', null); 

    // some code.... 

    return $response->withJson("ADD/UPDATE $email with $email"); 

} 

EDIT

Мы оба забыли, что вы должны вернуть объект ответа.)

С add_email_address является обратным вызовом маршрута, он должен вернуть ответ Psr\Http\Message\ResponseInterface.

+0

Еще ошибка 500, но на этот раз в 'use ($ app)' декларации. Я удалил 'use ($ app)' и '$ addon_email = $ app-> request-> getParam ('addon_email', null);' все еще дает 500 – JackTheKnife

+0

Я обновил OP, поскольку, похоже, я смешал старый код от v2, который больше не работает на v3. Теперь я получаю 200 OK, но не пост. – JackTheKnife

+0

У вас есть 'displayErrorDetails' установлен в' true' в вашем конфиге? Если вы этого не сделали, [здесь, как вы это делаете] (http://www.slimframework.com/docs/handlers/error.html). –