sh0umik
sh0umik

Reputation: 1679

Decode laravel 4 Input::json()

I am having a hard time decoding json input in laravel .. am building a Restful API and when i send post data using RestClient and then die and dump in laravel i got

object(Symfony\Component\HttpFoundation\ParameterBag)#205 (1) {
  ["parameters":protected]=>
  array(6) {
    ["firstName"]=>
    string(8) "John"
    ["lastName"]=>
    string(7) "Doe"
    ["bloodGroup"]=>
    string(2) "B+"
    ["phone"]=>
    string(8) "+9999999"
    ["address"]=>
    string(8) "Somecity"
    ["symptoms"]=>
    string(3) "Bla"
  }
}

Now i have tied to access the data using

$data = Input::json();
echo $data->firstName;

that does not work .. tried to convert it to array and then access like $data['firstName'] does not work .

array(1) {
  ["*parameters"] =>
  array(6) {
    ["firstName"]=>
    string(8) "John"
    ["lastName"]=>
    string(7) "Doe"
    ["bloodGroup"]=>
    string(2) "B+"
    ["phone"]=>
    string(8) "+9999999"
    ["address"]=>
    string(8) "Somecity"
    ["symptoms"]=>
    string(3) "Bla"
  }
}

i want to decode the data then save it to db, Here is a tutorial building similar App ..

I have tried the post_index() method explained here but no luck .

http://maxoffsky.com/maxoffsky-blog/building-restful-api-in-laravel-part-2-design-api-controller/

Upvotes: 5

Views: 13765

Answers (2)

Dean Chiu
Dean Chiu

Reputation: 1365

Based on my experiment

If you are sending an array of multiple objects like the following example from the Javascript using JSON

[{crop_id: 1, test_id: 6},{crop_id: 1, test_id: 7},{crop_id: 1, test_id: 8}]

You need to use Input::json()->all() function in PHP.

$arr = Input::json()->all();
$crop_id = $arr[0]['crop_id'];
$test_id = $arr[0]['test_id'];

Upvotes: 2

Marwelln
Marwelln

Reputation: 29433

You can use ->get() to access properties from a Symfony\Component\HttpFoundation\ParameterBag response.

$input = Input::json();
$input->get('firstName')

You can also get all inputs as an array and then type cast it to an object with (object). Note that this will throw an error if your property doesn't exists, so if I where you, I would use the ->get() method mentioned above.

$input = (object)Input::all();
$input->firstName;

Upvotes: 9

Related Questions