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?

StackOverflow https://stackoverflow.com/questions/2346742

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

War es hilfreich?

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');

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top