To mutate the application states during POST
, PUT
, PATCH
or DELETE
operations, API Platform uses
classes called data persisters. Data persisters receive an instance of the class marked as an API resource (usually using
the @ApiResource
annotation). This instance contains data submitted by the client during the deserialization
process.
A data persister using Doctrine ORM is included with the library and is enabled by default. It is able to persist and delete objects that are also mapped as Doctrine entities. A Doctrine MongoDB ODM data persister is also included and can be enabled by following the MongoDB documentation.
However, you may want to:
Custom data persisters can be used to do so. A project can include as many data persisters as needed. The first able to persist data for a given resource will be used.
To create a data persister, you have to implement the DataPersisterInterface
.
This interface defines only 3 methods:
persist
: to create or update the given dataremove
: to delete the given datasupport
: to check whether the given data is supported by this data persisterHere is an implementation example:
namespace App\DataPersister;
use ApiPlatform\Core\DataPersister\DataPersisterInterface;
use App\Entity\BlogPost;
final class BlogPostDataPersister implements DataPersisterInterface
{
public function supports($data): bool
{
return $data instanceof BlogPost;
}
public function persist($data)
{
// call your persistence layer to save $data
return $data;
}
public function remove($data)
{
// call your persistence layer to delete $data
}
}
If service autowiring and autoconfiguration are enabled (they are by default), you are done!
Otherwise, if you use a custom dependency injection configuration, you need to register the corresponding service and add the
api_platform.data_persister
tag. The priority
attribute can be used to order persisters.
# api/config/services.yaml
services:
# ...
'App\DataPersister\BlogPostDataPersister': ~
# Uncomment only if autoconfiguration is disabled
#tags: [ 'api_platform.data_persister' ]
Made with love by
Les-Tilleuls.coop can help you design and develop your APIs and web projects, and train your teams in API Platform, Symfony, Next.js, Kubernetes and a wide range of other technologies.
Learn more