131 lines
2.9 KiB
Markdown
131 lines
2.9 KiB
Markdown
# Entity Manager
|
|
|
|
The entity manager of Muprh is a proxy of the Doctrine's entity manager. It gives you an easy way to create, update and delete an entity and dispatches events easy to subscribe to.
|
|
|
|
## Implementation
|
|
|
|
Entities must implements `App\Core\Entity\EntityInterface`.
|
|
|
|
```php-inline title="src/Entity/MyEntity.php"
|
|
namespace App\Entity;
|
|
|
|
use App\Repository\MyEntityRepository;
|
|
use Doctrine\ORM\Mapping as ORM;
|
|
use App\Core\Entity\EntityInterface;
|
|
|
|
#[ORM\Entity(repositoryClass: MyEntityRepository::class)]
|
|
class MyEntity implements EntityInterface
|
|
{
|
|
// ...
|
|
}
|
|
```
|
|
|
|
## Usage
|
|
|
|
There are 2 entity managers which are services:
|
|
|
|
* `App\Core\Manager\EntityManager` used for all entities
|
|
* `App\Core\Manager\TranslatableEntityManager` used for translatable entities
|
|
|
|
```php-inline title="src/Controller/FooController.php"
|
|
namespace App\Controller;
|
|
|
|
use App\Core\Manager\EntityManager
|
|
use App\Entity\MyEntity;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
class FooController
|
|
{
|
|
public function foo(EntityManager $entityManager): Response
|
|
{
|
|
$myEntity = new MyEntity();
|
|
|
|
// Creates an entity
|
|
$entityManager->create($myEntity);
|
|
|
|
// Updates an entity
|
|
$entityManager->update($myEntity);
|
|
|
|
// Deletes an entity
|
|
$entityManager->delete($myEntity);
|
|
|
|
// ...
|
|
}
|
|
}
|
|
```
|
|
|
|
## Events
|
|
|
|
Events are dispatched before and after creation, update and deletion. All entities of Muprh use the entity manager.
|
|
|
|
```php-inline title="src/EventSubscriber/MyEntityEventSubscriber.php"
|
|
namespace App\EventSubscriber;
|
|
|
|
use App\Core\Entity\EntityInterface;
|
|
use App\Core\Event\EntityManager\EntityManagerEvent;
|
|
use App\Core\EventSubscriber\EntityManagerEventSubscriber;
|
|
use App\Entity\MyEntity;
|
|
|
|
class MyEntityEventSubscriber extends EntityManagerEventSubscriber
|
|
{
|
|
public function supports(EntityInterface $entity): bool
|
|
{
|
|
return $entity instanceof MyEntity;
|
|
}
|
|
|
|
public function onCreate(EntityManagerEvent $event)
|
|
{
|
|
if (!$this->supports($event->getEntity())) {
|
|
return;
|
|
}
|
|
|
|
// ...
|
|
}
|
|
|
|
public function onUpdate(EntityManagerEvent $event)
|
|
{
|
|
if (!$this->supports($event->getEntity())) {
|
|
return;
|
|
}
|
|
|
|
// ...
|
|
}
|
|
|
|
public function onDelete(EntityManagerEvent $event)
|
|
{
|
|
if (!$this->supports($event->getEntity())) {
|
|
return;
|
|
}
|
|
|
|
// ...
|
|
}
|
|
|
|
public function onPreCreate(EntityManagerEvent $event)
|
|
{
|
|
if (!$this->supports($event->getEntity())) {
|
|
return;
|
|
}
|
|
|
|
// ...
|
|
}
|
|
|
|
public function onPreUpdate(EntityManagerEvent $event)
|
|
{
|
|
if (!$this->supports($event->getEntity())) {
|
|
return;
|
|
}
|
|
|
|
// ...
|
|
}
|
|
|
|
public function onPreDelete(EntityManagerEvent $event)
|
|
{
|
|
if (!$this->supports($event->getEntity())) {
|
|
return;
|
|
}
|
|
|
|
// ...
|
|
}
|
|
}
|
|
```
|