2013-10-16 16 views
11

cấu hình tương ứng của tôi làLàm cách nào để chỉ định định dạng mặc định cho FOS RestBundle thành json?

fos_rest: 
    view: 
     view_response_listener: force 

sensio_framework_extra: 
    view: 
     annotations: false 

và nó thực sự làm phiền để xác định các tuyến đường như

@Route("/jobs", defaults={ "_format" = "json" }) 

mỗi lần.

Vì vậy, có thể chỉ định nó ở đâu đó để được giả định theo mặc định không?

PS:

Nếu tôi loại bỏ defaults={ "_format" = "json" } và gọi /jobs endpoint tôi nhận được một ngoại lệ

Unable to find template "APIBundle:Jobs:post.html.twig". 

PPS:

routing_loader: 
    default_format: json 

sẽ không làm việc bởi vì nó chỉ được sử dụng cho tạo các tuyến đường tự động.

Trả lời

21

Câu trả lời cuối cùng là dễ dàng hơn nhiều và là không liên quan đến FOS \ RestBundle:

api: 
    resource: "@APIBundle/Controller/" 
    type:  annotation 
    defaults: {_format: json} # <<<<<<< 
    prefix: /api/ 
+0

nó hoạt động không sử dụng 'loại: rest' ?? –

+0

@Mateo Tibaquirá: có – zerkms

10

Bạn có thể chỉ định default_format trình tải định tuyến sẽ sử dụng cho tham số _format nếu không có thông số nào được chỉ định.

# app/config/config.yml 
fos_rest: 
    routing_loader: 
     default_format: json 

Theo mặc định, tuyến được tạo bằng chuỗi {_format}. Nếu bạn muốn nhận được các url sạch (/jobs thay /jobs.{_format}) sau đó tất cả các bạn phải làm là thêm một số cấu hình:

# app/config/config.yml 
fos_rest: 
    routing_loader: 
     include_format:  false 

Có một cái nhìn tại FOSRestBundle documentation để biết thêm thông tin.

+0

Nó sẽ ** chỉ ** làm việc nếu tôi sử dụng hệ đường tự động. Với các tuyến tùy chỉnh, nó không hoạt động. Xin lỗi, không phải là câu trả lời. – zerkms

+0

Nó hoạt động tốt cho tôi. Với @Route ('/ foo') trong bộ điều khiển của tôi, gọi/foo không nhận được bất kỳ ngoại lệ nào. – Picoss

+0

Định dạng có được chấp nhận là 'json' cuối cùng không? Nếu bạn loại bỏ tham số đó - hành vi có thay đổi không? – zerkms

7

tôi không thể kiểm tra giải pháp này bản thân mình nhưng sau the documentation có vẻ như bạn có thể sử dụng một định dạng mặc định bằng cách cho quy tắc trên con đường

config.yml

fos_rest: 
    format_listener: 
     rules: 
      # setting fallback_format to json means that instead of considering 
      # the next rule in case of a priority mismatch, json will be used 
      - 
       path: '^/' 
       host: 'api.%domain%' 
       priorities: ['json', 'xml'] 
       fallback_format: json 
       prefer_extension: false 

Với ví dụ, yêu cầu được thực hiện với Accept-headers chứa

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json 

Sẽ cho kết quả trong một định dạng json Yêu cầu

+0

Tôi thực sự đã thấy nhưng chưa thử. Tôi sẽ cố gắng vào ngày mai và sẽ ping bạn với kết quả. Cảm ơn :-) Nhưng tôi đã thấy một nhược điểm - theo cách đó bạn ** có ** để vượt qua 'application/json' trong tiêu đề' Accept', trong khi tôi muốn 'json' chỉ là định dạng cho mọi yêu cầu vô điều kiện. – zerkms

+1

... nhưng sau khi đọc kỹ trang đó - tôi nghĩ rằng nó có thể hoạt động. Tôi chắc chắn nó sẽ.Dù sao tôi sẽ cho bạn biết ngày mai – zerkms

+0

Cảm ơn bạn đã tham gia, tôi đã tìm thấy câu trả lời thực sự :-) – zerkms

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