Symfony2: Eco JSON Da un Controller per l’Uso in un ExtJS 4 Griglia
Ho appena iniziato con Symfony2 e sto cercando di capire quale sia l’approccio corretto è per vedere fuori JSON da un controller (ad esempio, People
) per l’uso in un ExtJS 4 griglia.
Quando stavo facendo il tutto con un alla vaniglia MVC approccio, il mio controller avrebbe metodo chiamato qualcosa come getList
che si chiama l’ People
modello getList
metodo, prendere i risultati e fare qualcosa di simile a questo:
<?php
class PeopleController extends controller {
public function getList() {
$model = new People();
$data = $model->getList();
echo json_encode(array(
'success' => true,
'root' => 'people',
'rows' => $data['rows'],
'count' => $data['count']
));
}
}
?>
- Che cosa fa questo tipo di comportamento simile in Symfony2?
- È il controller il posto giusto per questo tipo di comportamento?
- Quali sono le migliori pratiche (in un raggio di Symfony) per risolvere questo tipo di problema?
Sì.
In symfony sembra molto molto simili, ma ci sono un paio di sfumature.
Vi voglio proporre il mio approccio per questa roba. Partiamo dal routing:
Il
_format
parametro non è obbligatorio, ma vedremo in seguito perché è importante.Ora diamo un’occhiata al controller
Controller esegue il rendering dei dati nel formato che è impostato nella configurazione di routing. Nel nostro caso è il formato json.
Qui è un esempio di un possibile modello:
Il vantaggio di questo approccio (intendo utilizzando _format) è che se si decide di passare da json, per esempio, xml che non c’è problema, basta sostituire _format in configurazione di routing e, naturalmente, creare template corrispondente.
{{ data | json_encode | raw }}
Vorrei evitare di usare un template per visualizzare i dati come la responsabilità per la fuga di dati, ecc quindi nel modello. Invece io uso integrato json_encode funzione in PHP molto come hai suggerito.
Impostare il percorso per il controller di routing.yml come suggerito nella risposta precedente:
L’unica ulteriore passo è quello di forzare la codifica della risposta.
_format
l’opzione corretta, ilContent-Type
intestazione è impostato automaticamente da Symfony2, come può essere visto inResponse
classe qui. Dal momento che, in questo esempio, il formato èjson
, ilContent-Type
intestazione con il valore'application/json'
verrà aggiunto alla risposta.Utilizzare
return new JsonResponse(array('a' => 'value', 'b' => 'another-value');
è necessario utilizzare il giusto spazio dei nomi:Come descritto qui: http://symfony.com/doc/current/components/http_foundation/introduction.html#creating-a-json-response
Invece di costruire la vostra risposta è inoltre possibile utilizzare il built-in JsonResponse.
Si definisce il percorso come nelle altre risposte suggerite:
E utilizzare il nuovo tipo di risposta:
Per ulteriori informazioni, vedere la api o il doc (versione 2.6).
Semplice. Utilizzare FOSRestBundle e restituire solo le Persone oggetto dal controller.
utilizzare