symfonysoft-deletedoctrine-extensionsapi-platform.com

Using Doctrine extension softdeleteable with api-platform


I'm building an API with Symfony 3.4 and api-platform. I want to use soft delete on my entity. I've installed DoctrineExtensions and StofDoctrineExtensionsBundle.

config.yml:

doctrine:
    dbal:
        connections:
            default:
               […]

    orm:
        entity_managers:
            default:
                naming_strategy: doctrine.orm.naming_strategy.underscore
                connection: default
                mappings:
                    […]
                filters:
                    softdeleteable:
                        class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
                        enabled: true

And my entity :

<?php

namespace AppBundle\Entity;

use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;

/**
 * MyEntity
 *
 * @ORM\Table(name="MyEntity", schema="MyEntity")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\MyEntityRepository")
 * @Gedmo\SoftDeleteable(fieldName="deletedAt")
 * @ApiResource
 */
class MyEntity
{
    /**
     * @var \DateTime
     * @ORM\Column(name="deleted_at", type="datetime")
     */
    private $deletedAt;

    […]

This is not working. I'm aware that I need to configure something (namely the EventManager), but I don't know how. Here is the error I get when I try to create an entity

Listener "SoftDeleteableListener" was not added to the EventManager!

I think I've done everything that page explains : StofDoctrineExtensionsBundle documentation

Any help would be greatly appreciated.


Solution

  • Try the following configuration at your config.yml

    doctrine:
        orm:
            entity_managers:
                default:
                    naming_strategy: doctrine.orm.naming_strategy.underscore
                    connection: default
                    mappings:
                        […]
                    filters:
                        softdeleteable:
                            class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
                            enabled: true
    
    stof_doctrine_extensions:
        default_locale: %locale%
        orm:
            default:
                softdeleteable: true
    

    Note: My configuration looks like:

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        entity_managers:
          default:
            auto_mapping: true
            filters:
                softdeleteable:
                  class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
                  enabled: true
    

    Seems that you're customizing your mappings so be sure you're autoloading the SoftDeleteable classes properly.