2012-05-13 17 views
11

Ich versuche Symfony2 und FOSRestBundle zu verwenden, um mit einem REST-Framework zu kommen, und ich versage kläglich.Ich kann nicht mit FOSRestBundle arbeiten

Ich habe folgendes getan:

in meiner deps-Datei:

[FOSRest] 
    git=git://github.com/FriendsOfSymfony/FOSRest.git 
    target=fos/FOS/Rest 

[FOSRestBundle] 
    git=git://github.com/FriendsOfSymfony/FOSRestBundle.git 
    target=bundles/FOS/RestBundle 

[JMSSerializerBundle] 
    git=git://github.com/schmittjoh/JMSSerializerBundle.git 
    target=bundles/JMS/SerializerBundle 

In meiner apps/config.yml

fos_rest: 
    view: 
     formats: 
      rss: true 
      xml: false 
     templating_formats: 
      html: true 
     force_redirects: 
      html: true 
     failed_validation: HTTP_BAD_REQUEST 
     default_engine: twig 


sensio_framework_extra: 
    view: 
     annotations: false 

In meinem Controller:

namespace Rest\WebServiceBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use FOS\RestBundle\View\View; 


class DefaultController extends Controller 
{ 

    public function indexAction($name) 
    { 


    $view = View::create() 
      ->setStatusCode(200) 
      ->setData($name); 
     return $this->get('fos_rest.view_handler')->handle($view); 


    } 
} 

Wenn ich auf die URL gehe: http://local.symfony.com/web/app_dev.php/hello/test

ich:

Unable to find template "". 
500 Internal Server Error - InvalidArgumentException 
2 linked Exceptions: Twig_Error_Loader » Twig_Error_Loader 

Die Dokumentation scheint mir verwirrend und ich bin weiterhin nicht in der Lage. Alles, was ich will, ist in der Lage zu sein, ein Array von Daten an den Controller zu übergeben und ein JSON-Format zurück zu bekommen. Kann jemand helfen?

+4

Ich habe auch Schwierigkeiten, dies zu erreichen. Es scheint ziemlich verwirrend für das, was wie eine relativ einfache Aufgabe scheint. Hattest du Glück dabei? – greg

Antwort

17

In formats Abschnitt von config.yml müssen Sie JSON-Format aktivieren und andere Formate deaktivieren und Standard _format Wert als JSON in Route festlegen. z

# app/config/config.yml 
fos_rest: 
    view: 
     formats: 
      json: true 
      rss: false # removing them will also work 
      xml: false 
#....... 

#bundle/routing.yml 
route_name: 
    pattern: /route 
    defaults: { _controller: Bundle:Controller:Method, _format:json } 

Oder in der Steuerung können Sie

$view->setFormat('json'); 

auch das Beispiel Links Kasse in der zugehörigen Dokumentation tun.

+3

Es funktionierte auch für mich, aber nur wenn ich ein Array als Daten verwende, was ist, wenn ich ein Objekt ausgeben möchte? – alex88

+1

Funktioniert nicht mit den neueren Versionen. Eine neuere Antwort: http://stackoverflow.com/a/18035437/842697. Die Kommentare sind sehr interessant. –

Verwandte Themen