sajad torkamani

In a nutshell

State processors are classes that receive an instance of a class marked as an API resource (e.g., typically using the #[ApiResource] attribute), and used to persist or update records in a data store (e.g., MySQL database).

You typically use state processors to handle POST, PUT, PATCH, or DELETE operations. State processors were released in API Platform 3 and replaced the previous data persistors API.

An example state processor

1. Create a state processor

Assuming you have the Symfony MakerBundle installed, you can run the below to quickly create a custom state processor:

bin/console make:state-processor

An example state processor looks like the following:


namespace App\State;

use App\Entity\BlogPost;
use ApiPlatform\Metadata\Operation;
use ApiPlatform\State\ProcessorInterface;

class BlogPostProcessor implements ProcessorInterface
     * {@inheritDoc}
    public function process($data, Operation $operation, array $uriVariables = [], array $context = [])
        // call your persistence layer to save $data
        return $data;

2. Configure operation to use the processor


namespace App\Entity;

use ApiPlatform\Metadata\Post;
use App\State\BlogPostProcessor;

#[Post(processor: BlogPostProcessor::class)]
class BlogPost {}