Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从DataPersister设置响应代码_Php_Symfony_Api Platform.com - Fatal编程技术网

Php 如何从DataPersister设置响应代码

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将异常转换为带有消息和指定代码的响应

我正在使用Symfony 4.4/API平台,我正在尝试从DataPersister返回响应或设置其代码

在我的DataPersister中,我测试Admin->isManager是否为true,因此永远不能删除Admin,因此在本例中,我希望在响应414中返回一个自定义状态代码,并返回一条消息thisAdminIsManager

AdminDataPersister:
你应该抛出一个异常,然后你应该配置你的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();

    }