Php 如何从DataPersister设置响应代码
我正在使用Symfony 4.4/API平台,我正在尝试从DataPersister返回响应或设置其代码 在我的DataPersister中,我测试Admin->isManager是否为true,因此永远不能删除Admin,因此在本例中,我希望在响应414中返回一个自定义状态代码,并返回一条消息thisAdminIsManager AdminDataPersister:Php 如何从DataPersister设置响应代码,php,symfony,api-platform.com,Php,Symfony,Api Platform.com,我正在使用Symfony 4.4/API平台,我正在尝试从DataPersister返回响应或设置其代码 在我的DataPersister中,我测试Admin->isManager是否为true,因此永远不能删除Admin,因此在本例中,我希望在响应414中返回一个自定义状态代码,并返回一条消息thisAdminIsManager AdminDataPersister: 你应该抛出一个异常,然后你应该配置你的api_平台来处理这个异常。ApiPlatform将异常转换为带有消息和指定代码的响应
你应该抛出一个异常,然后你应该配置你的api_平台来处理这个异常。ApiPlatform将异常转换为带有消息和指定代码的响应 步骤1:创建专用异常类
首先,这是你第二次回答我的问题,我非常感谢你。其次,是的,这是可行的,但Http响应内容包含我从AdminDataPersister到AppKernel的跟踪。。因此,我创建了一个响应侦听器,并设置了我的内容消息。谢谢你@Alexandre。不客气!我不确定是否理解,但t跟踪不会出现在生产环境中。
final class AdminDataPersister implements ContextAwareDataPersisterInterface
{
/* @var EntityManagerInterface */
private $manager;
public function __construct(
EntityManagerInterface $manager
){
$this->manager = $manager;
}
public function supports($data, array $context = []): bool
{
return $data instanceof Admin;
}
public function persist($data, array $context = [])
{
$this->manager->persist($data);
$this->manager->flush();
}
public function remove($data, array $context = [])
{
/* @var Admin $data */
#The Manager can never be deleted:
if( $data->getManager() ){
return; //here I want to return the custom response
}
$this->manager->remove($data);
$this->manager->flush();
}