Giter Club home page Giter Club logo

ficra's Introduction

Ficra

Project

  • PHP 8.1
  • Symfony 6.3.*
  • Doctrine
  • Docker

Etude de cas

  • soft delete
  • Chain provider
  • Table inheritance

Table inheritance

Setup

Implémentons cette stratégie. La class User doit être abstraite et avoir les annotations suivantes :

#[ORM\Entity(repositoryClass: UserRepository::class)]
#[ORM\InheritanceType('JOINED')]
#[ORM\DiscriminatorColumn(name: 'discr', type: 'string')]
#[ORM\DiscriminatorMap(['collaborator' => Collaborator::class, 'partner' => Partner::class])]
abstract class User implements UserInterface, PasswordAuthenticatedUserInterface
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    protected ?int $id = null;

    #[ORM\Column(type: 'string')]
    protected ?string $firstName;

    #[ORM\Column(type: 'string')]
    protected ?string $lastname;

    #[ORM\Column(type: 'string', length: 180, unique: true)]
    protected ?string $email;

    #[ORM\Column(type: 'json')]
    protected array $roles = [];

    #[ORM\Column(type: 'string')]
    protected string $password;
    
    // getter && setter
}

Class Collaborator

#[ORM\Entity(repositoryClass: CollaboratorRepository::class)]
class Collaborator extends User
{

}

Class Partner

#[ORM\Entity(repositoryClass: PartnerRepository::class)]
class Partner extends User
{

}

Nous indiquons :

Le type d'héritage : JOINED, cela indique à Doctrine la stratégie à utiliser. La colonne qui identifie le type d'utilisateur : discr les valeurs possibles du type d'utilisateur : Collaborator ou Partner.

Au niveau de la base de données, cela se traduira par 3 tables : user, partner et collaborator, chacune possédant les informations de leurs classes respectives. Les tables partner et collaborator seront liées à la table user via une clé étrangère (en général, cela sera la clé primaire id qui sert de clé étrangère.).

Chain provider

C'est dans config/packages/security.yaml que cela se passe :

    providers:
        app_collaborator_provider:
            entity:
                class: App\Entity\Collaborator
                property: 'email'
        app_partner_provider:
            entity:
                class: App\Entity\Partner
                property: 'email'
        chain_provider:
            chain:
                providers: ['app_collaborator_provider', 'app_partner_provider']
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            lazy: true
            provider: chain_provider

Soft Delete

installation :

composer require gedmo/doctrine-extensions

Mise à jour de la configuration Doctrine config/doctrine.yaml

doctrine:
    dbal:
    # your dbal config here
    orm:
        auto_generate_proxy_classes: '%kernel.debug%'
        auto_mapping: true
        # only these lines are added additionally
        filters:
            softdeleteable:
                class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter

Ajout des listeners dans services.yaml

services:
    # Doctrine Extension listeners to handle behaviors
    gedmo.listener.softdeleteable:
        class: Gedmo\SoftDeleteable\SoftDeleteableListener
        tags:
            - { name: doctrine.event_listener, event: 'onFlush' }
            - { name: doctrine.event_listener, event: 'loadClassMetadata' }
        calls:
            - [ setAnnotationReader, [ "@annotation_reader" ] ]

ficra's People

Contributors

ludovicjj avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.