Salut à tous !

Je développe actuellement une app que je veux modulable et personnalisable. J'ai donc un bundle "AppBundle" contenant l'application ainsi qu'un bundle "CustomBundle" contenant les surcharges (vues, controleurs, services...). Tout fonctionne jusque là. Ce système me permet de mettre à jour l'application pour chacun des clients sans pour autant affecter les personnalisations. Cela dit, je voudrais pouvoir surcharger une entité mais je n'y parviens pas.

J'ai une entité "AppBundle:Produit" liée à une entité "AppBundle:References" en OneToOne. Je voudrais pouvoir surcharger "AppBundle:References" par "CustomBundle:References" afin de pouvoir la personnaliser selon les besoins des clients. J'ai tenté de transformer "AppBundle:References" en MappedSuperclass mais la relation entre produit et references ne fonctionne plus et cela m'oblige alors a lier "AppBundle:Produit" à "CustomBundle:References" ce qui ne me plaît pas.

Si vous avez des idées à me proposer j'en serais bien heureux.

Merci d'avance !!

2 réponses


raph59
Auteur

Alors les gars, vraiment personne n'a une petite solution pour moi?
Je suis toujours bloqué sur ce même problème...

Essaie le pattern Decorator.

/** dans AppBundle */
class Produit { ... }
class Reference { ... }

/** dans CustomBundle */

// Decorator pattern
abstract class ReferenceDecorator {
    private $entity;

    public function __construct (Reference $entity) {
        $this->entity = $entity;
    }

    // Récupérer l'entité pour la base de données.
    public function get_entity (): Reference {
        return $this->entity;
    }
}

class ReferenceCustom extends ReferenceDecorator {
    public function method1 () {
        $this->entity->method1();
        echo ' Méthode 1 surchargée';
    }

    public function method2 () {
        $this->entity->method2();
        echo ' Méthode 2 surchargée';
    }
}

// Utilisation
$custom = new ReferenceCustom(new Reference());
$custom->method1();