json_decode() ожидал строку, я мог получить только массив

Я использую Slim Framework и пытаюсь создать REST API. Короче говоря, я уже 4 часа ищу решение моей проблемы, заключающееся в том, что json_decode не будет принимать в качестве аргумента массив, возвращаемый getBody().

При использовании 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));

});

Если бы кто-нибудь мог мне помочь, я был бы рад. Конечно, я также хотел бы знать, делаю ли я что-то не так или приближаюсь к неправильному пути. Я провожу много времени в поисках ответа, и я не мог найти ни одного.


person Marcelo Zárate    schedule 17.06.2013    source источник
comment
И что именно сейчас возвращает $request-›getBody()?   -  person mario    schedule 18.06.2013
comment
@mario Если я сделаю var_dump($body); Я получаю ---› массив (2) { [номер] => строка (12) General Pico [провинция] => строка (1) 1 }   -  person Marcelo Zárate    schedule 18.06.2013
comment
И почему и какая часть этого нуждается в расшифровке, по вашему мнению?   -  person mario    schedule 18.06.2013
comment
Вы не поверите, я даже вставляю ЭТО и НЕ замечаю этого. Мне нужно было только преобразовать массив в объект, и все. Вы были удивительно полезны, я буду рад отметить вас как правильный ответ, если вы опубликуете его как это. Спасибо, Марио! Но принцесса в другом замке ха-ха   -  person Marcelo Zárate    schedule 18.06.2013


Ответы (1)


У вас уже есть декодированные данные в $input, поэтому там ничего декодировать не нужно. Вы также можете избежать ненужных приведений типов, так как они не нужны в этом сценарии (PHP — язык со слабой типизацией).

person SoftwareAndOutsourcing    schedule 17.06.2013