2016-04-15 115 views
1

我正在使用FOSRestBundle来管理我的api。我已经有一个正在运行的sf2应用程序,并且我想允许第三人访问我的一些应用程序功能。我配置我的API,它正常工作,我可能会消耗我的API航线成功 例如:Symfony2 FOSRestBundle覆盖默认应用程序

GET http://my.domain.ldt/api/v1/users 

我的API只处理JSON格式,这是我fos_rest配置:

fos_rest: 
    param_fetcher_listener: true 
    body_listener: true 
    format_listener: true 
    view: 
     view_response_listener: 'force' 
     exception_wrapper_handler: My\ApiBundle\Handlers\ApiExceptionWrapperHandler 
     formats: 
      json : true 
     failed_validation: HTTP_BAD_REQUEST 
     templating_formats: 
      html: false 
      xml: false 
    routing_loader: 
     default_format: json 
     include_format: false 
    exception: 
     enabled: true 
    service: 
     view_handler: my.view_handler 

services: 
    my.json_handler: 
     class: My\ApiBundle\Handlers\JsonHandler  

    my.view_handler: 
     parent: fos_rest.view_handler.default 
     calls: 
     - ['registerHandler', [ 'json', ["@my.json_handler", 'createResponse'] ] ] 

正如我所说,我的Api运行良好,但我面临一个主要问题:当我尝试从我的Web浏览器(http://my.domain.ldt/http://my.domain.ldt/login)访问主应用程序时,我得到以下响应而不是我的经典网页:

An Exception was thrown while handling: No matching accepted Response format could be determined 

为什么我的fos_rest conf适用于我的主网站?是否有可能只为api路径设置api conf?我错过了什么 ?

回答

1

问题是您忘了为FOSRestBundle的格式侦听器定义规则。

事实上,我不确定你是否需要这个监听器,因为它似乎使用json作为默认格式。格式监听器将尝试匹配Accept标头并基于它提取当前的请求格式。所以除了如果你想为你的api支持其他格式而不是json,你可以不使用它。

如果你要修复它,而不是删除它,你有喜欢的东西来更新你的配置:

fos_rest: 
    format_listener: 
     enabled: true 
     rules: 
      - { path: '^/', priorities: ['json', 'xml', 'html], fallback_format: 'json' } 

当然你也可以改变这个规则有不同的规则,为你的API:

fos_rest: 
    format_listener: 
     enabled: true 
     rules: 
      - { path: '^/api', fallback_format: 'json' } 
      - { path: '^/', fallback_format: 'html' }