2014-06-23 9 views
9

questa è la mia prima domanda:Yii2 Webservice RESTful: JSON Formato richiesta

Sto cercando di costruire un webservice riposante con Yii2. Il controller si estende da ActiveController e ha il modello corrispondente. La lettura dei dati funziona bene e senza problemi.

Ma quando provo a creare nuovi oggetti, mi imbatto in un errore. Uso l'estensione Chrome Advanced Rest Client e POST i seguenti dati:

{ 
    "team": 1 
} 

Ho anche provato diversi formati.

Ma ho sempre trovato questa risposta:

[{ 
    "field":"team", 
    "message":"Team cannot be blank." 
}] 

Avete qualche suggerimento quello che sto facendo di sbagliato?

Grazie!

+0

Potresti inserire la sezione in cui acquisisci i parametri $ _POST nella tua azione? – Gihan

risposta

19

Penso che tutti mi hai sulla strada giusta. Grazie per quello!

Il problema era che Yii2 utilizza un parser integrato per l'analisi della richiesta JSON. Ho pensato che questi parser siano configurati di default (dato che non c'è alcun suggerimento per configurarlo nella documentazione). Ma il parser doveva essere configurato da solo.

Ecco come configurare il parser nel main-configurazione:

'request' => [ 
    'parsers' => [ 
     'application/json' => 'yii\web\JsonParser', 
    ] 
] 

È possibile trovare maggiori informazioni qui: JsonParser

Spero che questo possa aiutare gli altri in esecuzione nello stesso problema.

+0

fantastico !! questo è esattamente il mio problema! – intellion

+1

Aiuta anche se aggiungi esplicitamente Content-Type = application/json quando invii la richiesta –

+0

Ancora non riesco a ottenere la richiesta params della richiesta => [ 'parsers' => [ 'application/json '=>' yii \ web \ JsonParser ', ], ' cookieValidationKey '=>' 1VwIjoKRv9mGh6NTZnmvFu1roaeC2zdQ ', ], –

3

Penso che stai catturando i dati pubblicati con $ _POST che non funziona. Perché stai inviando dati JSON. In tal caso, è necessario utilizzare file_get_contents('php://input') per accedere ai dati di invio. È un problema con l'intestazione Content-Type della richiesta. Il $ _POST funziona quando è impostato su application/x-www-form-urlencoded

Ecco una domanda simile handle json request in PHP

+0

Questo ha funzionato per me per "Content-Type: application/xml" – crafter

+0

È possibile utilizzare [Request :: getBodyParams] (http://www.yiiframework.com/doc-2.0/yii-web-request.html#getBodyParams () -detail) per ottenere e analizzare l'input in base all'intestazione 'Content-Type'. – Ezze