私はSlim Frameworkを使用して、 REST APIを構築しようとしています。簡単に言えば、私は json_decode が getBody() が返す配列を引数としてとらないという問題の解決策を探して 4 時間のようでした。
Advanced REST Client for Chromeを使用して、投稿リクエストを行うときに表示されるエラーは次のとおりです。
Slim Application Error
The application could not run because of the following error:
Details
Type: ErrorException
Code: 2
Message: json_decode() expects parameter 1 to be string, array given
File: C:\xampp\htdocs\farmacias\index.php
Line: 100
Trace
#0 [internal function]: Slim\Slim::handleErrors(2, 'json_decode() e...', 'C:\xampp\htdocs...', 100, Array)
#1 C:\xampp\htdocs\farmacias\index.php(100): json_decode(Array)
#2 [internal function]: {closure}()
#3 C:\xampp\htdocs\farmacias\Slim\Router.php(172): call_user_func_array(Object(Closure), Array)
#4 C:\xampp\htdocs\farmacias\Slim\Slim.php(1222): Slim\Router->dispatch(Object(Slim\Route))
#5 C:\xampp\htdocs\farmacias\Slim\Middleware\Flash.php(86): Slim\Slim->call()
#6 C:\xampp\htdocs\farmacias\Slim\Middleware\MethodOverride.php(94): Slim\Middleware\Flash->call()
#7 C:\xampp\htdocs\farmacias\Slim\Middleware\ContentTypes.php(80): Slim\Middleware\MethodOverride->call()
#8 C:\xampp\htdocs\farmacias\Slim\Middleware\PrettyExceptions.php(67): Slim\Middleware\ContentTypes->call()
#9 C:\xampp\htdocs\farmacias\Slim\Slim.php(1174): Slim\Middleware\PrettyExceptions->call()
#10 C:\xampp\htdocs\farmacias\index.php(139): Slim\Slim->run()
#11 {main}
そして、私のコードは、行100であり、json_decodeが含まれています
// POST /localidades
$app->post('/localidades', function () use ($app){
// Obtenemos el cuerpo del request, y lo decodificamos
$request = $app->request();
$body = $request->getBody();
$input = json_decode($body);
// Creamos y guardamos el registro
$eloc = R::dispense('localidades');
$eloc->nombre = (string)$input->nombre;
$eloc->provincia = (string)$input->provincia;
R::store($eloc);
// Creamos y devolvemos JSON
$app->response()->status(201);
$app->response()->header('Content-Type','application/json');
echo json_encode(R::exportAll($eloc));
});
誰かが私を助けることができれば、私は喜んでいます。もちろん、私が何か間違ったことをしているのか、間違った方法でアプローチしているのかについても知りたいです。答えを探すのに多くの時間を費やしましたが、何も見つかりませんでした。