k0p*_*kus 6 php serialization exception symfony symfony5
在 symfony5 控制器中,我可以通过以下方式返回 json 响应:
return $this->json(['key' => 'content');
Run Code Online (Sandbox Code Playgroud)
然而,当我抛出 HttpException 时,我会在开发和生产中看到默认的 html 错误页面。
我想创建一个restful api,所以我想将所有HttpException转换为json。
我想将所有控制器配置为将其响应格式化为 json。最多,我想添加一个异常处理程序,将异常转换为正确的消息。(在 prod 中它应该包含较少的信息,在 dev 中它可能包含异常堆栈跟踪。)
我怎样才能实现这个目标?我以为我可以使用注释format
选项@Route
,但它不起作用。
这是我的示例控制器:
<?php declare(strict_types=1);
namespace App\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
class StatusController extends AbstractController
{
/**
* @Route("/status", name="status", format="json")
* @Template
* @return JsonResponse
*/
public function status()
{
if (true) {
// this will render as html, how to serialize it as json?
throw new NotFoundHttpException("This is an example");
}
$ok = new \stdClass();
$ok->status = "OK";
return $this->json($ok);
}
}
Run Code Online (Sandbox Code Playgroud)
在寻找这个的过程中,我发现了这个 PR,它似乎实现了我想要做的事情,但我不确定我错过了什么。
在symfony 博客上,我发现了 Yonel Ceruto 的以下回答:
您需要安装/启用序列化器组件,
但我不知道这意味着什么。
在 dev 和 prod 中,我得到了这些 html 视图而不是 json 响应:
事实证明,我所缺少的只是安装了symfony 文档中指出的序列化器包:
composer require symfony/serializer-pack
Run Code Online (Sandbox Code Playgroud)
然后,我的异常就可以正常渲染为 json 了。
归档时间: |
|
查看次数: |
11635 次 |
最近记录: |