FOS rest bundle: unable to find template

自古美人都是妖i 提交于 2020-01-10 18:24:08

问题


I get the exception:

Unable to find template ""

The other similar questions didn't help; and weirdly enough it was working fine and then suddenly started giving me this exception.

composer:

   "friendsofsymfony/rest-bundle": "0.13.*@dev",
   "jms/serializer-bundle": "0.12.*@dev",

I'm following Automatic route generation: single RESTful controller (for simple resources)

config:

fos_rest:
    format_listener: true
    routing_loader:
        default_format: json
    view:
        view_response_listener: 'force'
    serializer:
        serialize_null: true

sensio_framework_extra:
    view:    { annotations: false }
    router:  { annotations: true }

routing:

sectors:
    type: rest
    prefix: /{v}
    resource: JJ\MainBundle\Controller\SectorsController

controller:

/**
 * @RouteResource("Sector")
 */
class SectorsController extends Controller
...
    public function cgetAction()
    {
        return $this->getSectorIndustryRepo()->findAll();
    }

回答1:


I managed to resolve this issue by setting the listener explicitly to false:

fos_rest:
    format_listener: false

EDIT

This also works:

fos_rest:
    format_listener:
        prefer_extension: false
        default_priorities:
            - json



回答2:


For FOSRestBundle version 2.0 the config should be

fos_rest:
    format_listener:
        rules:
            prefer_extension: false
            fallback_format: json



回答3:


Annotate your controller action with @View to resolve this issue.

use FOS\RestBundle\View\View;

Have a look at the documentation chapter View Response listener.


If you don't want to annotate every action - you can set the @View annotation for a complete class using my pull request here.

Add this to your composer.json to use the PR.

"require": {
    "friendsofsymfony/rest-bundle": "dev-dev-view-addition as 0.12.0", 

// ...

"repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/nifr/FOSRestBundle"
    },



回答4:


(For reference) If One is testing with a rest client or manually be sure to set the header in your request: Accept:application/json

Because fosRestBundle tries to determine the proper response type from the headers in the request.



来源:https://stackoverflow.com/questions/18010784/fos-rest-bundle-unable-to-find-template

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!