Symfony2: Echo JSON d'un contrôleur à utiliser dans une grille ExtJS 4
Je suis juste de commencer avec Symfony2 et je suis en train d'essayer de comprendre quelle est la bonne approche est de pour écho hors JSON à partir d'un contrôleur (par exemple, People
) pour une utilisation dans un ExtJS 4 de la grille.
Quand je faisais tout à l'aide d'une vanille MVC approche, mon contrôleur aurait méthode appelée quelque chose comme getList
qui permettrait d'attirer les People
du modèle getList
méthode, de prendre ces résultats et de faire quelque chose comme ceci:
<?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']
));
}
}
?>
- Ce que fait ce type de comportement ressembler dans Symfony2?
- Est le contrôleur le bon endroit pour ce genre de comportement?
- Quelles sont les meilleures pratiques au sein de Symfony) pour résoudre ce genre de problème?
source d'informationauteur Levi Hackwith
Vous devez vous connecter pour publier un commentaire.
Oui.
Dans symfony, il a l'air assez bien, mais il y a quelques nuances.
Je veux proposer à mes démarche pour ce genre de choses. Nous allons commencer à partir de routage:
La
_format
paramètre n'est pas requis, mais vous verrez plus tard pourquoi c'est important.Maintenant, nous allons jeter un coup d'oeil au contrôleur
Contrôleur affiche les données dans le format qui est définie dans la configuration de routage. Dans notre cas, c'est le format json.
Ici est un exemple de modèle possible:
L'avantage de cette approche (je veux dire en utilisant _format) c'est que si vous décidez de passer de json, par exemple, xml que pas de problème - il suffit de remplacer _format dans la configuration de routage et, bien sûr, de créer de modèle correspondant.
Je voudrais éviter d'utiliser un modèle pour rendre les données de la responsabilité pour échapper données, etc est alors dans le modèle. Au lieu de cela j'utilise la fonction intégrée de json_encode fonction en PHP bien, comme vous l'avez suggéré.
Établir l'itinéraire de la manette dans le routage.yml comme suggéré dans la réponse précédente:
La seule étape supplémentaire est de forcer l'encodage dans la réponse.
À utiliser
return new JsonResponse(array('a' => 'value', 'b' => 'another-value');
vous avez besoin d'utiliser le droit de l'espace de noms:Comme décrit ici: http://symfony.com/doc/current/components/http_foundation/introduction.html#creating-a-json-response
Au lieu de construire votre propre réponse, vous pouvez également utiliser le haut-JsonResponse.
Vous définissez la route comme dans les autres réponses proposées:
Et utiliser le nouveau type de réponse:
Pour plus d'informations, voir la api ou la doc (version 2.6).
Simple. Utilisation FOSRestBundle et ne renvoyer que les Gens de l'objet à partir du contrôleur.
utilisation