Php FOSRestBundle不';t在Symfony 4.1中工作
在Symfony 4.1项目下使用FOSRestBundle返回视图时,我遇到问题 这是来自我的控制器的代码:Php FOSRestBundle不';t在Symfony 4.1中工作,php,symfony,fosrestbundle,Php,Symfony,Fosrestbundle,在Symfony 4.1项目下使用FOSRestBundle返回视图时,我遇到问题 这是来自我的控制器的代码: class NewsController extends FOSRestController { public function getNewsAction() { $data = ['news1', 'news2']; $view = $this->view($data, 200); return $this
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 }
framework:
# templating: { engines: ['twig'] }
因此,我有非常基本的配置,但仍然会出现如下错误:
(1/1)运行时异常
必须启用SensioFrameworkExtraBundle视图注释才能使用ViewResponseListener
我试图删除“查看:查看\u响应\u侦听器:'force'”,但出现以下错误:
必须将Symfony\Bundle\FrameworkBundle\Templating\EngineInterface>的实例注入FOS\RestBundle\View\ViewHandler中才能呈现模板
我已经挣扎了好几个小时了。是因为Symfony 4测试版的状态吗?或者我做错了什么?也许我错过了一些依赖?我在官方文件中找不到任何关于这个问题的有用信息
必须启用SensioFrameworkExtraBundle视图注释
将行添加到
config/packages/framework.yaml
framework:
templating: { engines: ['twig'] }
它会解决的
必须将Symfony\Bundle\FrameworkBundle\Templating\EngineInterface>的实例注入FOS\RestBundle\View\ViewHandler中才能呈现模板
您是否在请求中发送
Accept:application/json
如果不需要,则不一定需要twig
,但需要从bundle配置中的格式配置中删除html
:
fos_rest:
format_listener:
rules:
- { path: ^/, prefer_extension: true, fallback_format: json, priorities: [ json ] }
默认设置是在优先级中包含
html
,这需要twig
模板组件集成在Symfony 4.3中。所以模板部分必须从config/packages/framework.yaml中删除(或注释)
framework:
secret: '%env(APP_SECRET)%'
php_errors:
log: true
sensio_framework_extra:
view: { annotations: true }
framework:
# templating: { engines: ['twig'] }
要在ViewHandler中将细枝定义为模板服务,请在config/services.yaml中添加以下行
fos_rest.templating:
alias: twig
fos_rest.模板:
别名:twigSorry,我的复制粘贴错误。它不适用于真值和假值。顺便说一句,可能与有关,4.1将是主开发版本。4.0仅处于发布候选阶段。根据fosrestbundle,它还不支持4.x。没什么大不了的。它很管用,但我不明白的是,我已经在我的项目中使用了twig。当我想在ViewHandler中使用通用框架配置时,为什么我必须添加它?谢谢!这为我解决了Symfony 4.1的问题。这应该是正确的答案!如果您想对所有路由使用json响应,规则{fallback_format:json}就足够了!这与问题有什么关系?Alexander Matrosov建议将模板行添加到配置中,以解决问题的最后一个错误(我现在无法添加注释答案)。但在Symfony 4.3中,它是不推荐使用的解决方案。