2013-04-17 15 views
6

Staram się postępować zgodnie z Will Durand's tutorial, w jaki sposób skonfigurować dobre API REST z Symfony2. Jednak jestem braku na samym początku jak mam ten błąd:Kontroler musi zwrócić odpowiedź, tablica podana

The controller must return a response (Array(welcome => Welcome to my API) given). 

czegoś podstawowe musi być nie tak z moim bardzo podstawowej konfiguracji. Próbowałem różnych ustawień dla konfiguracji fos_rest, ale configuration reference nie jest bardzo pomocny, ponieważ tak naprawdę nie rozumiem, co robią pojedyncze ustawienia.

Moja konfiguracja:

//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' 
     ); 
    } 
} 

Moje API powinien powrócić XML oder JSON na podstawie nagłówka zaakceptować. Nigdy nie będzie pliku wyjściowego HTML.

Odpowiedz

28

Naprawiłem to! config musi wyglądać następująco:

sensio_framework_extra: 
    view: 
     annotations: false 

fos_rest: 
    view: 
     view_response_listener: true 
+1

myślę, że powinien on być dodany w oficjalnych docs (proszę skontaktować się z nimi i przedkłada go) . Ponieważ dzisiaj nie istnieje. Gratulacje! –

+1

Po prostu przesyłasz powiązany komunikat o błędzie z dzienników, aby ludzie mogli go znaleźć przez google: 'Komunikat PHP: PHP Błąd krytyczny: Niezamknięty wyjątek 'RuntimeException' z komunikatem" Musisz wyłączyć adnotacje widoku w SensioFrameworkExtraBundle podczas używania detektora odbierania odpowiedzi FOSRestBundle . " w /home/jupiter/symfony/dimsym/vendor/friendsofsymfony/rest-bundle/FOS/RestBundle/DependencyInjection/Compiler/ConfigurationCheckPass.php: 27' –

4

ja spędzeniu dnia na poszukiwaniu konfiguracji pracy:

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