我正在使用带有fos-restbundle的Symfony2开发一个应用程序。我想创建一些API路由以及一些常规路由(只有一个用于AngularJS前端)。这是我的fos_rest配置(以及来自sensio的一些配置行):
sensio_framework_extra:
view: { annotations: false }
router: { annotations: true }
request: { converters: true }
fos_rest:
routing_loader:
default_format: json
include_format: true
param_fetcher_listener: force
body_listener: true
allowed_methods_listener: true
view:
view_response_listener: 'force'
formats:
json: true
xml: true
format_listener:
rules:
- { path: '^/api', priorities: ['json', 'xml'], fallback_format: json, prefer_extension: true }
access_denied_listener:
json: true
如您所见,我已启用 view_response_listener 并禁用查看注释。我找不到为索引操作定义“常规”(非REST)路由(和视图)的方法(AngularJS的必要)。继续收到错误:
ERROR - Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException: "No matching accepted Response format could be determined" at C:\wamp\www\CRMProject\vendor\friendsofsymfony\rest-bundle\EventListener\FormatListener.php line 69
我很感激任何帮助。
答案 0 :(得分:9)
您可以为索引页面添加其他规则(例如):
format_listener:
rules:
- { path: '^/api', priorities: ['json', 'xml'], fallback_format: json, prefer_extension: true }
- { path: '^/', priorities: [ 'text/html', '*/*'], fallback_format: html, prefer_extension: true }
阅读有关格式侦听器的文档:http://symfony.com/doc/current/bundles/FOSRestBundle/format_listener.html
答案 1 :(得分:4)
正如official docs中所建议的那样,你也可以禁用" normal"的格式监听器。网站的一部分(不是API):
通常在将此Bundle与现有应用程序集成时,它 可能对禁用某些路由的格式侦听器很有用。在 在这种情况下,可以定义一个停止格式的规则 侦听器通过将stop设置为true来确定格式 选项。包含此设置的任何规则以及后面的任何规则都将 不予考虑,请求格式将保持不变。
# app/config/config.yml
fos_rest:
format_listener:
enabled: true
rules:
- { path: '^/api', priorities: ['json', 'xml'], fallback_format: json, prefer_extension: false }
- { path: '^/', stop: true } # Available for version >= 1.5