ApiPlatform\Core\Bridge\Doctrine\EventListener\WriteListener::onKernelView PHP Method

onKernelView() public method

Persists, updates or delete data return by the controller if applicable.
public onKernelView ( GetResponseForControllerResultEvent $event ) : mixed
$event Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent
return mixed
    public function onKernelView(GetResponseForControllerResultEvent $event)
    {
        $request = $event->getRequest();
        if ($request->isMethodSafe(false)) {
            return;
        }
        $resourceClass = $request->attributes->get('_api_resource_class');
        if (null === $resourceClass) {
            return;
        }
        $controllerResult = $event->getControllerResult();
        if (null === ($objectManager = $this->getManager($resourceClass, $controllerResult))) {
            return;
        }
        switch ($request->getMethod()) {
            case Request::METHOD_POST:
                $objectManager->persist($controllerResult);
                break;
            case Request::METHOD_DELETE:
                $objectManager->remove($controllerResult);
                $event->setControllerResult(null);
                break;
        }
        $objectManager->flush();
    }

Usage Example

 public function testOnKernelViewWithNoManager()
 {
     $dummy = new Dummy();
     $dummy->setName('Dummyrino');
     $managerRegistryProphecy = $this->prophesize(ManagerRegistry::class);
     $managerRegistryProphecy->getManagerForClass('Dummy')->willReturn(null);
     $writeListener = new WriteListener($managerRegistryProphecy->reveal());
     $httpKernelProphecy = $this->prophesize(HttpKernelInterface::class);
     $request = new Request();
     $request->setMethod(Request::METHOD_DELETE);
     $request->attributes->set('_api_resource_class', 'Dummy');
     $event = new GetResponseForControllerResultEvent($httpKernelProphecy->reveal(), $request, HttpKernelInterface::MASTER_REQUEST, $dummy);
     $this->assertNull($writeListener->onKernelView($event));
     $this->assertNotEquals($dummy, $writeListener->onKernelView($event));
 }