Bonjour,

Voila je rencontre un probleme de compréhension.
Cela touche plusieurs domaines :

Ce que je fais

Actuellement j'essaie de mettre en place un crud simple avec symfony.
J'ai une classe abstraite mere véhicule et 2 classes filles moto & camion. J'ai choisi d'utiliser le STI (Single Table Inheritance) de doctrine pour représenter cet héritage en bdd via les annotations suivantes : (le choix du STI est du a la simplicité de l'exemple, mais je suis pret a utiliser un CTI ou mappedsuperclass si c'est plus logique et plus facile a implémenter).

/**
 * Vehicule
 *
 * @ORM\Table(name="vehicule")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\VehiculeRepository")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({"moto_db" = "Moto", "camion_db" = "Camion"})
 */

abstract class Vehicule
{
   .....
 }

Puis bien sur dans des fichiers séparés :

 /**
     * @ORM\Entity
 */

 class Moto extends Vehicule
 {
    ...
 }

 /**
     * @ORM\Entity
 */

 class Camion extends Vehicule
 {
 ...
 }

J'arrive bien a créer ma table avec la commande doctrine:schema:update --force puis j'arrive parfaitement a loader mes fixtures avec la cmd doctrine:fixtures:load
Le tout s'affiche correctement dans ma vue twig associé.

Ce que je veux

Mon probleme de compréhension; et du coup de réalisation ; arrive des lors que je souhaite implémenter la création et l'édition d'un véhicule.
Dans symfony un formulaire se base sur un objet et ne fait que l'hydrater. Du coup avec ma classe abstraite je suis un peu perdu.
Je souhaite avoir un formulaire sur une seule page qui me permettrais de créer une moto ou un camion et de persister le résultat en bdd.

Je ne sais pas si c'est possible, mais en gros mon formulaire aurait un champ nom (venant du parent) , un champ type (venant du parent) sous forme de select ayant pour choix (moto , camion) qui me permettrait de créer ensuite les bons champs associés a l'enfant moto ou l'enfant camion.

Je ne sais pas si j'ai été assez clair, je l'espere en tout cas car je souhaite sincérement comprendre le méchanisme et implémenter un exemple complet.

Merci d'avance !

Aucune réponse