FOSRestBundle在Symfony 4.1中不起作用

jan*_*s83 9 php symfony fosrestbundle

我在使用Symfony 4.1项目下的FOSRestBundle返回视图时遇到问题.

这是我的控制器的代码:

class NewsController extends FOSRestController
{

    public function getNewsAction()
    {
        $data = ['news1', 'news2'];

        $view = $this->view($data, 200);

        return $this->handleView($view);
     }
}
Run Code Online (Sandbox Code Playgroud)

fos_rest.yaml

fos_rest:
    param_fetcher_listener:  true
    allowed_methods_listener:  true
    routing_loader: true
    view:
        view_response_listener:  'force'
    format_listener:
        rules:
            - { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json, html ] }
Run Code Online (Sandbox Code Playgroud)

framework.yaml

framework:
    secret: '%env(APP_SECRET)%'
    php_errors:
        log: true

sensio_framework_extra:
    view:        { annotations: true }
Run Code Online (Sandbox Code Playgroud)

所以我有非常基本的配置,我仍然会收到这样的错误:

(1/1)RuntimeException必须启用SensioFrameworkExtraBundle视图注释才能使用ViewResponseListener.

我试图删除"view:view_response_listener:'force'",但后来我遇到了这个错误:

必须在FOS\RestBundle\View\ViewHandler中注入Symfony\Bundle\FrameworkBundle\Templating\EngineInterface>的实例才能呈现模板.

我几个小时都在挣扎.是因为Symfony 4 beta状态?或者也许我做错了什么?也许我想念一些家属?我在官方文档中找不到任何有关此问题的帮助.

Ale*_*sov 17

添加行到 config/packages/framework.yaml

framework:
    templating: { engines: ['twig'] }
Run Code Online (Sandbox Code Playgroud)

它会解决

必须在FOS\RestBundle\View\ViewHandler中注入Symfony\Bundle\FrameworkBundle\Templating\EngineInterface>的实例才能呈现模板.


mag*_*tik 9

你发送Accept: application/json请求了吗?

如果没有,您不一定需要twig,但需要html从bundle config中的格式配置中删除:

fos_rest:
    format_listener:
        rules:
            - { path: ^/, prefer_extension: true, fallback_format: json, priorities: [ json ] }
Run Code Online (Sandbox Code Playgroud)

默认是具有html优先级,并且需要twig.

  • 谢谢!这为我解决了Symfony 4.1的问题。 (2认同)