2013-04-17 6 views
6

Ich versuche Will Durand's tutorial zu folgen, wie man eine gute REST API mit Symfony2 einrichtet. Jedoch scheitere ich ganz am Anfang, als ich diesen Fehler erhalte:Der Controller muss eine Antwort zurückgeben, Array gegeben

Etwas grundlegendes muss mit meiner sehr grundlegenden Konfiguration falsch sein. Ich habe verschiedene Einstellungen für die fos_rest Konfiguration versucht, aber die configuration reference bietet keine sehr hilfreich sein, da ich nicht wirklich verstehe, was die einzelnen Einstellungen tun.

Mein Setup:

//config.yml 
sensio_framework_extra: 
    view: 
     annotations: true 

fos_rest: ~ 

//Controller 
<?php 

namespace Acme\Bundle\ApiBundle\Controller; 

use FOS\RestBundle\Controller\Annotations as Rest; 

class DefaultController 
{ 
    /** 
    * @Rest\View 
    */ 
    public function indexAction() 
    { 
     return array(
      'welcome' => 'Welcome to my API' 
     ); 
    } 
} 

Meine API sollte XML oder JSON zurückgeben basierend auf dem Header akzeptieren. Es wird nie eine HTML-Ausgabe geben.

Antwort

28

Ich reparierte es! Die Config muss wie folgt aussehen:

sensio_framework_extra: 
    view: 
     annotations: false 

fos_rest: 
    view: 
     view_response_listener: true 
+1

Ich denke, es sollte in den offiziellen Dokumenten hinzugefügt werden (bitte nehmen Sie Kontakt und abschicken) . Weil es heute nicht existiert. Glückwunsch! –

+1

Senden Sie nur zugehörige Fehlermeldung aus Protokollen, so dass die Leute über google finden können: 'PHP Nachricht: PHP Schwerwiegender Fehler: Uncaught Ausnahme 'RuntimeException' mit Nachricht 'Sie müssen die Ansichtsnotizen in SensioFrameworkExtraBundle deaktivieren, wenn Sie den FOSRestBundle View Response Listener verwenden . " in /home/jupiter/symfony/dimsym/vendor/friendsofsymfony/rest-bundle/FOS/RestBundle/DependencyInjection/Compiler/ConfigurationCheckPass.php: 27' –

4

verbringe ich einen Tag für die Suche Arbeitskonfiguration:

sensio_framework_extra: 
    view: { annotations: false } 
    router: { annotations: true } 

fos_rest: 
    param_fetcher_listener: true 
    body_listener: true 
    format_listener: true 
    view: 
     view_response_listener: 'force' 
     formats: 
      xml: true 
      json : true 
     templating_formats: 
      html: true 
     force_redirects: 
      html: true 
     failed_validation: HTTP_BAD_REQUEST 
     default_engine: twig 
    routing_loader: 
     default_format: json