FOSRestBundle在Symfony 4.1中不起作用

时间:2017-11-27 13:37:28

标签: 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);
     }
}

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 ] }

framework.yaml

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

sensio_framework_extra:
    view:        { annotations: true }

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

  

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

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

  

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

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

3 个答案:

答案 0 :(得分:14)

将行添加到config/packages/framework.yaml

framework:
    templating: { engines: ['twig'] }

它将解决

  

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

答案 1 :(得分:7)

您是否在请求中发送了d

如果没有,您不一定需要Accept: application/json,但您需要从捆绑包配置中的格式配置中删除twig

html

默认设置是优先级为fos_rest: format_listener: rules: - { path: ^/, prefer_extension: true, fallback_format: json, priorities: [ json ] } ,需要html

答案 2 :(得分:0)

模板组件集成在Symfony 4.3中为deprecated。因此,必须从config / packages / framework.yaml中删除模板部分(或添加注释)

framework:
    # templating: { engines: ['twig'] }

要在ViewHandler中将Twig定义为模板服务,请在config / services.yaml中添加以下行

    fos_rest.templating:
        alias: twig