2013-10-16 16 views
11

Benim karşılık gelen konfigürasyonFOS RestBundle için json için varsayılan biçim nasıl belirlenir?

fos_rest: 
    view: 
     view_response_listener: force 

sensio_framework_extra: 
    view: 
     annotations: false 

ve gerçekten

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

her zaman olduğu gibi rota belirlemek için rahatsız ediyor.

Yani bir yerde varsayılan olarak kabul edilecek bunu belirtmek mümkündür?

PS:

ben bir istisna alıyorum defaults={ "_format" = "json" } kaldırıp /jobs son nokta ararsanız

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

PPS:

routing_loader: 
    default_format: json 
sadece için kullanıldığından

çalışmayacak otomatik rota üretimi.

cevap

21

Çıkacaksınız:

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

'türünü kullanmıyor: rest' ?? –

+0

@Mateo Tibaquirá: evet – zerkms

10

Sen hiçbiri belirtilirse yönlendirme yükleyici _format parametre için kullanacağı bir default_format belirtebilir.

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

Varsayılan olarak, yollar {_format} dizesi ile oluşturulur.

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

detaylı bilgi için FOSRestBundle documentation göz at: Eğer temiz URL'ler ( /jobs yerine /jobs.{_format}) almak istiyorsanız o zaman yapmanız gereken tek şey bazı yapılandırma eklemektir.

+0

Olacak ** sadece ** eser ben otomatik rota nesil kullanmak faydalı olacaktır. Özel rotalar ile işe yaramıyor. Üzgünüm, cevap değil. – zerkms

+0

Benim için iyi çalışıyor. Denetleyicimde @Route ('/ foo') ile/foo çağrıldığında herhangi bir istisna olmaz. – Picoss

+0

Biçim sonunda 'json' olarak kabul edildi mi? Bu parametreyi kaldırırsanız - davranış değişir mi? – zerkms

7

ben bu çözüm kendimi test değil ama the documentation aşağıdaki Eğer config.yml

böyle ile
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 

yolunda

kuralları vererek varsayılan biçimini kullanabilirsiniz görünüyor,

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json 
içeren Accept-headers ile yapılan bir istek

son cevap çok daha kolaydır ve FOS \ RestBundle alakasız bir json talep formatında

+0

Aslında onu gördüm ama henüz denemedim. Yarın deneyeceğim ve sonuçlarla sana ping yapacağım. Ben json' koşulsuz her istek için sadece bir biçim oldu 'o isterken, sen **' Accept' başlığındaki 'application/json' geçmek ** var bu şekilde - Zaten bir dezavantajı bkz :-) Ama teşekkürler. – zerkms

+1

... ama bu sayfada iyice okuduktan sonra - bunun işe yarayabileceğini düşünüyorum. Eminim olacak.Her neyse yarın bilmene izin vereceğim – zerkms

+0

Katıldığınız için teşekkürler, gerçek cevabı buldum :-) – zerkms

İlgili konular