2012-05-13 24 views
11

Tôi đang cố gắng sử dụng Symfony2 và FOSRestBundle để tìm ra một khung công tác REST và tôi thất bại thảm hại.Không thể làm việc với FOSRestBundle

Tôi đã làm như sau:

trong DEPS tập tin của tôi:

[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 

Trong ứng dụng của tôi/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 

Trong điều khiển của tôi:

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); 


    } 
} 

Khi tôi truy cập URL: http://local.symfony.com/web/app_dev.php/hello/test

tôi nhận được:

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

Các tài liệu có vẻ khó hiểu đối với tôi và tôi không thể tiếp tục. Tất cả những gì tôi muốn là có thể truyền một mảng dữ liệu đến bộ điều khiển và lấy lại một định dạng JSON. Ai đó có thể giúp đỡ?

+4

Tôi cũng gặp sự cố khi thực hiện việc này. Nó có vẻ khá khó hiểu cho những gì có vẻ giống như một nhiệm vụ tương đối đơn giản. Bạn đã có may mắn với nó chưa? – greg

Trả lời

17

Trong phần formats của config.yml bạn phải bật định dạng json và tắt các định dạng khác và đặt giá trị mặc định _format là json trong tuyến đường. ví dụ

# 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 } 

Hoặc, trong điều khiển bạn có thể làm

$view->setFormat('json'); 

Cũng kiểm tra các liên kết ví dụ được đưa ra trong tài liệu.

+3

Nó làm việc cho tôi quá, nhưng chỉ khi tôi sử dụng một mảng như dữ liệu, những gì nếu tôi muốn xuất một đối tượng? – alex88

+1

Không hoạt động với các phiên bản mới hơn. Câu trả lời gần đây hơn: http://stackoverflow.com/a/18035437/842697. Các ý kiến ​​là rất interesants. –

Các vấn đề liên quan