【问题标题】:FOSRestBundle does not set the _format parameterFOSRestBundle 未设置 _format 参数
【发布时间】:2017-04-18 15:34:35
【问题描述】:

我有以下配置:

fos_rest:
    view:
        view_response_listener: 'force'
        formats:
          json: true
          xml: true
          html: false
    body_listener:
        decoders:
            json: fos_rest.decoder.json
            xml: fos_rest.decoder.xml
    body_converter:
        enabled: true
    format_listener:
        enabled: true
        rules:
          - { path: '^/api', priorities: ['xml', 'json'], fallback_format: xml, prefer_extension: false }
    param_fetcher_listener: force
    routing_loader:
#        default_format: xml
        include_format: false
    serializer:
        serialize_null: true

和以下控制器:

/**
 * @Rest\View(serializerGroups={"o-all-getCDashboard"})
 */
public function cgetAction($_format)
{
    $handler = $this->getHandler();
    die(dump($_format));

    return $handler->getAll();
}

extends FOSRestController implements ClassResourceInterface的类中

它总是转储null。如果我重新启用default_format: xml,我得到的始终是xml,尽管我发送了Accept 标头。它出什么问题了?为什么format_listener 不起作用?

【问题讨论】:

    标签: symfony fosrestbundle symfony-2.8


    【解决方案1】:

    您使用未更正的 format_listeners 配置。 尝试像这样使用我的配置:

    fos_rest:
        body_listener: true
        param_fetcher_listener: true
        view:
            view_response_listener: 'force'
    
            formats:
                jsonp: true
                json: true
                xml: false
                rss: false
            mime_types:
                json: ['application/json', 'application/x-json']
                jpg:  ['image/jpeg']
                png:  ['image/png']
            jsonp_handler: ~
        routing_loader:
            default_format:  json
            include_format:  false
        format_listener:
            rules:
                - { path: /api, priorities: [ json, jsonp ], fallback_format: json, prefer_extension: true }
        exception:
            enabled: true
    

    添加只是为您自己设置部分格式和 fallback_format。 在我的控制器中,我使用

    use FOS\RestBundle\Controller\Annotations as Rest;
    use FOS\RestBundle\Controller\Annotations\RouteResource;
    
    /**
    * @RouteResource("someName")
    */
    class myController extends FOSRestController implements ClassResourceInterface {
    
        /**
         * @param Request $request
         * @Rest\Post("/someLink")
        */
       public function insertLinkAction(Request $request) {}
    }
    

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      • 2016-03-21
      • 1970-01-01
      • 2017-04-08
      • 2013-04-11
      • 1970-01-01
      相关资源
      最近更新 更多