2017-09-01 2 views
1

J'essaie de créer un écouteur qui configure le Response en utilisant des annotations et définit le contenu de la réponse en tant que retour du contrôleur.Tableau de retour du contrôleur Symfony

Le code du contrôleur:

use PmtVct\PhotoBookBundle\Annotations\ResponseType; 
use Symfony\Component\HttpFoundation\Request; 

/** 
* @ResponseType("JSON") 
*/ 
public function home(Request $request) { 
    return ['asdf' => 123]; 
} 

Mais je reçois l'erreur 'The controller must return a response'.

Il existe un moyen de retourner un tableau sur Controller au lieu d'un Response?

+0

Et le tableau irait alors à l'auditeur? – Cerad

+0

oui, et l'écouteur définira quel type de réponse (JsonResponse, Response) pour utiliser –

+0

Okay. Stockez vos données dans l'objet de requête avec: $ request-> attributes-> set ('data', [whatever]); et juste retournez null du contrôleur. Demandez à votre écouteur d'extraire les données de la demande. – Cerad

Répondre

1

Vous essayez de faire une chose semblable à FOSRestBundle. Peut-être envisager d'utiliser ce bundle? Il permettra:

  • tableaux de retour dans le contrôleur, exactement une manière que vous voulez
  • réponse serialise en JSON, ou tout autre format que vous souhaitez, il peut aussi détecter automatiquement le format de demande.

Si vous voulez continuer à construire cette écoute vous - regardez comment cela se fait dans FOSRestBundle - https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/EventListener/ViewResponseListener.php - ils utilisent événement « kernel.view ».

+0

C'était ce dont j'avais besoin, merci –

0

Selon the documentation vous pouvez retourner un JsonResponse comme ceci:

return new JsonResponse(['asdf' => 123]); 
+0

Je ne veux pas ajouter la réponse sur le contrôleur, mais à l'extérieur dans le récepteur. –

+0

Pourquoi auriez-vous besoin d'un écouteur pour créer une réponse JSON? Aussi pouvez-vous partager votre code d'écoute si vous en avez? Je ne suis pas très sûr de ce que vous voulez faire. –

+0

Je dois créer la réponse en dehors du contrôleur pour rendre le développement d'un nouveau contrôleur plus agile. Dans mon idée, j'envoie le type de réponse dans une annotation et retourne juste les données nécessaires dans la fonction. Au lieu de 'public function home (Requête $ request) { $ response = nouvelle Réponse (['asdf' => 123]); $ response-> headers-> set ('Content-Type', 'application/json');} 'sera'/** * @ResponseType ("JSON") */ fonction publique home (Demande $ demande) { return ['asdf' => 123]; } ' –