我在使用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状态?或者也许我做错了什么?也许我想念一些家属?我在官方文档中找不到任何有关此问题的帮助。
答案 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