2013-04-04 10 views
8

Quando stavo sviluppando in Laravel4 Beta3, ero solito ottenere i dati JSON POST da un servizio utilizzando la funzione Input :: json(), ma quando ho aggiornato a Laravel4 Beta4, sto ottenendo seguente errore:Modifiche alla funzione Input :: json() tra Laravel 4 beta3 e beta4

Avviso: Undefined property: Symfony \ Component \ HttpFoundation \ ParameterBag :: $ productName in linea /Applications/MAMP/htdocs/commonDBAPI/app/controllers/UserController.php 47

Qualcuno ha qualche idea, quale potrebbe essere la ragione.

Grazie,

risposta

15

È possibile accedere solo il JSON utilizzando Input::json()->all().

L'input JSON viene anche unito a Input::all() (e Input::get('key', 'default')) in modo da poter utilizzare la stessa interfaccia per ottenere dati di stringa di query, dati di modulo e un carico utile JSON.

La documentazione non riflette ancora tutte le modifiche perché Laravel 4 è ancora in versione beta e l'attenzione è rivolta a ottenere il codice giusto, la documentazione verrà aggiornata pronta per la versione pubblica.


Come è JSON fusa con ingresso :: tutti()?

consideri il seguente JSON:

{ 
    'name': 'Phill Sparks', 
    'location': 'England', 
    'skills': [ 
     'PHP', 
     'MySQL', 
     'Laravel' 
    ], 
    'jobs': [ 
     { 
      'org': 'Laravel', 
      'role': 'Quality Team', 
      'since': 2012 
     } 
    ] 
} 

Quando fuse in ingresso di laravel JSON viene decodificato, e le chiavi di primo livello diventano chiavi di primo livello in ingresso. Per esempio:

Input::get('name'); // string 
Input::get('skills'); // array 
Input::get('jobs.0'); // object 
Input::all(); // Full structure of JSON, plus other input 
+0

Usi di input :: json() -> all() è semplice e utile, ma come utilizzare Input :: all() per ottenere il JSON? – Sameer

+0

Input :: all() rappresenta tutto l'input inviato al tuo script (cioè stringa di query, dati del modulo e payload JSON). Quindi in una risposta non è possibile ottenere * solo * il JSON da 'Input :: all()'. Puoi comunque usare 'Input :: get ('chiave', 'default')' per ottenere una chiave individuale. –

+0

ok. Ma non c'è nessun keyname assegnato al payload JSON, quindi come usare Input :: get per quello? – Sameer

0

Yup hanno cambiato per restituire un oggetto ParameterBag passare il codice per ingresso :: JSON() -> tutti()

+0

Nella documentazione ufficiale, Taylor non ha menzionato Input :: json() -> all(). Potrebbe essere così, cambieranno anche questo? Si prega di trovare qui sotto la dichiarazione della documentazione ufficiale: ** Alcune librerie JavaScript come Backbone possono inviare input all'applicazione come JSON. È possibile accedere a questi dati tramite Input :: come normale. ** – Sameer

0

Per: { "name": "Olivier", "title": "Solo una prova" }

Prova questa:

$ input = Ingresso :: jSON() -> tutti();

return $ input ['nome'];

Problemi correlati