Symfony2 + FOS Rest Bundle - 常规路线

时间:2015-11-22 16:49:18

标签: symfony fosrestbundle

我正在使用带有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 

我很感激任何帮助。

2 个答案:

答案 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