Lehre Erbe. Gibt es eine einfache Möglichkeit, alle untergeordneten Klassen / Tabellen zu deren Verwendung in einem ausgewählten Bereich in symfony Formulare zu bekommen?
-
23-09-2019 - |
Frage
Ich habe gerade angefangen symfony 1.4 und Lehre zu verwenden. (Gebraucht 1,0-1,2 + Propel viel vor).
dachte ich Lehre einen Versuch zu geben, wegen des schnellen und großen Entwicklungsprozess in der Vergangenheit.
Dank jwage ;-)
Im mit Tabelle Vererbung. Dies ist ein kleiner Teil meiner 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
jetzt Im Denk eine einfache Art und Weise mit einem die richtige Form zu erstellen.
Der Benutzer sollte am oberen Rand des Formulars müssen wählen Felder (wie Sie siehe hier können: http://msm-esv.dyndns.org/frontend_dev. php / vehicles / Insert )
Sie sollten die „Elternklasse“ wie Rennfahrzeuge oder Karts wählen und bald.
Nach dass der Benutzer das Kind Klasse wie Tourenwagen wählen sollten oder Sonstige.
Dann sollte die Seite neu zu laden und die richtige Form anzuzeigen.
Gibt es eine Funktion in Lehre die inheritated / Kind-Klassen zu erhalten für sie in dem zweiten Auswahlfeld angezeigt wird?
(z. Rennfahrzeuge haben Tourenwagen, .., ..., Sonstige und Karts haben TonyKart, ..., ..., Sonstige)
Danach i dynamisch die zugeordnete Formularklasse wie schaffen könnte:
$chooseMode = $request->getParameter('chooseMode').'Form';
$modeFormClass = new $chooseMode();
oder ich habe darüber nachgedacht, genau das richtige Modell in den übergeordneten Einstellung Formularklasse.
Was sind Ihre Gedanken? Ich würde wirklich irgendwelche Vorschläge schätzen und Hilfe :-)
Vielen Dank,
Marco
Lösung
Gibt es direkte Funktionen wie eine Lehre getSubclasses
oder PHP get_children_of
? Nicht, dass ich begegnet ist, in Lehre oder PHP. Die nächstgelegene Ich weiß über die PHP-Funktion is_subclass die Sie während Iterieren durch alle Ihre möglichen Klassen nutzen könnten.
Sie Ihre Unterklassen unterscheiden sich erheblich von Ihrem Hauptmodell? Ich sehe nur eine Spalte Variation in der obigen Beispiele, aber ich vermute, dass nur der Kürze halber wurde.
Ich stelle fest, die Attraktivität der Struktur Sie versuchen, aber es scheint auch, wie es eine unglaubliche Schmerzen auf lange Sicht sein könnte. Wäre es möglich, stattdessen ein separates VehicleCategory
Modell aufgebaut, dass selbst referenziert eine verschachtelte Struktur zu schaffen, und dann Vehicles
zu diesen Kategorien gehören könnte? Dies hätte Rennfahrzeuge als Top-Level-Kategorie und Tourenwagen und Sonstige wäre Kategorien mit einem Elternteil von Rennfahrzeugen mit Vehicles
Zugehörigkeit zu allen drei. Wenn Sie nicht zu viel Feldvariation in Ihrem Kind Modelle haben haben Sie könnten alle benutzerdefinierten Felder im Vehicles
Modell und nur Anzeige / stellte sie zu den entsprechenden Zeiten enthalten.
Nur ein paar Gedanken, die Hoffnung, das hilft.
Andere Tipps
Wenn Sie die Unterklassen einer Lehre Nehmen Sie finden müssen, könnten Sie
$yourSuperObject->getTable()->getOption('subclasses')
oder in
Doctrine::getTable('SuperClass')->getOption('subclasses');