l'héritage de la doctrine. Est-il un moyen facile d'obtenir toutes les classes enfants / tables pour les utiliser dans un champ de sélection dans les formulaires de symfony?
-
23-09-2019 - |
Question
Je viens de commencer à utiliser symfony 1.4 et Doctrine. (Utilisé 1,0 - 1,2 + Propel beaucoup avant).
Je pensais que donner Doctrine essayer, à cause de la rapide et énorme Le processus de développement dans le passé.
Merci à jwage ;-)
Im en utilisant le tableau héritage. Ceci est une petite partie de mon schema.yml:
Articles:
columns:
id:
type: integer(4)
primary: true
notnull: true
autoincrement: true
marken_id:
type: integer(4)
notnull: false
user_id:
type: integer(4)
notnull: false
address_id:
type: integer(4)
notnull: false
...
Vehicles:
inheritance:
extends: Articles
type: concrete
Rennfahrzeuge:
columns:
stvo:
type: boolean
notnull: false
default: false
inheritance:
extends: Vehicles
type: concrete
Tourenwagen:
inheritance:
extends: Rennfahrzeuge
type: column_aggregation
keyField: type
keyValue: 1
...
Sonstige:
inheritance:
extends: Rennfahrzeuge
type: column_aggregation
keyField: type
keyValue: 6
Karts:
inheritance:
extends: Vehicles
type: concrete
TonyKart:
inheritance:
extends: Karts
type: column_aggregation
keyField: type
keyValue: 1
...
Sonstige:
inheritance:
extends: Karts
type: column_aggregation
keyField: type
keyValue: 9
Im pense maintenant à l'aide d'un moyen simple de créer une forme droite.
L'utilisateur devrait avoir à sélectionner des champs en haut de la forme (comme vous peut voir ici: http://msm-esv.dyndns.org/frontend_dev. php / Fahrzeuge / insert )
Vous devez choisir la « classe parente » comme Rennfahrzeuge ou Karts et bientôt.
Après que l'utilisateur doit choisir la classe enfant comme Tourenwagen ou Sonstige.
Ensuite, la page doit recharger et afficher la bonne forme.
Y at-il fonction Doctrine pour obtenir les classes inheritated / enfant pour les afficher dans le second champ de sélection?
(par exemple. Rennfahrzeuge a Tourenwagen, .., ..., a Sonstige et Karts TonyKart, ..., ..., Sonstige)
Après que je pouvais créer dynamiquement la classe sous forme assignée comme:
$chooseMode = $request->getParameter('chooseMode').'Form';
$modeFormClass = new $chooseMode();
ou j'ai pensé à mettre juste le bon modèle dans le parent classe de formulaire.
Que pensez-vous? Je voudrais vraiment apprécier toutes les suggestions et aider :-)
Merci beaucoup,
Marco
La solution
Y at-il des fonctions directes telles qu'une getSubclasses
Doctrine ou get_children_of
PHP? Non pas que je suis venu à travers, dans la doctrine ou PHP. Le plus proche que je connais est la fonction PHP is_subclass que vous pouvez utiliser en itérer toutes vos classes possibles.
Vos sous-classes varient considérablement de votre modèle principal? Je ne vois dans vos exemples ci-dessus variation d'une colonne, mais je suppose que c'était juste par souci de concision.
Je me rends compte de l'appel de la structure que vous essayez, mais il semble aussi que ça pourrait être la douleur incroyable dans une long terme. Serait-il possible de mettre en place à la place un modèle de VehicleCategory
distinct qui se fait référence à fournir une structure imbriquée et votre Vehicles
pourrait appartenir à ces catégories? Cela aurait Rennfahrzeuge en tant que catégorie de haut niveau et Tourenwagen et Sonstige serait catégories avec un parent de Rennfahrzeuge avec Vehicles
appartenant à tous les trois. Si vous n'avez pas trop de variations de champ dans vos modèles enfants, vous pouvez inclure tous les champs personnalisés dans le modèle Vehicles
et afficher uniquement / mettre les au moment opportun.
Juste quelques pensées, espoir qui aide.
Autres conseils
Si vous avez besoin de trouver les sous-classes d'un enregistrement Doctrine vous pouvez utiliser
$yourSuperObject->getTable()->getOption('subclasses')
ou
Doctrine::getTable('SuperClass')->getOption('subclasses');