php - tutorial - ¿Cómo especificar el formato predeterminado para FOS / RestBundle a json?
fosrestbundle tutorial (3)
Mi configuración correspondiente es
fos_rest:
view:
view_response_listener: force
sensio_framework_extra:
view:
annotations: false
y realmente molesta especificar la ruta como
@Route("/jobs", defaults={ "_format" = "json" })
cada vez.
Entonces, ¿es posible especificarlo en algún lugar para ser asumido por defecto?
PD:
Si defaults={ "_format" = "json" }
y llamo al punto de defaults={ "_format" = "json" }
/jobs
recibo una excepción
Unable to find template "APIBundle:Jobs:post.html.twig".
PPS:
routing_loader:
default_format: json
no funcionará porque solo se usa para la generación automática de rutas.
La respuesta final es mucho más fácil y es irrelevante para FOS / RestBundle:
api:
resource: "@APIBundle/Controller/"
type: annotation
defaults: {_format: json} # <<<<<<<
prefix: /api/
No pude probar esta solución yo mismo, pero siguiendo la documentación parece que puede usar un formato predeterminado dando reglas en el camino
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
Con tal, una solicitud hecha con Accept-headers
contienen
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json
Dará como resultado un formato de solicitud json
Puede especificar un default_format
que el cargador de enrutamiento usará para el parámetro _format
si no se especifica ninguno.
# app/config/config.yml
fos_rest:
routing_loader:
default_format: json
Por defecto, las rutas se generan con la cadena {_format}. Si quiere obtener urls limpias ( /jobs
en /jobs.{_format}
lugar /jobs.{_format}
), entonces todo lo que tiene que hacer es agregar alguna configuración:
# app/config/config.yml
fos_rest:
routing_loader:
include_format: false
Eche un vistazo a la documentación de FOSRestBundle para obtener más información.