2016-04-15 110 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' }