2010-12-13 7 views
0

Ich habe ein Formular für ein Objekt namens AccountImport. Dieses Formular lebt in einem vom Administrator generierten Modul. Zusätzlich zu den Feldern, die direkt den Attributen dieses Objekts zugeordnet sind, benötige ich ein paar zusätzliche Felder.Admin Formular mit "extra" Felder

Wenn ich nur die Felder zum AccountImport Formular hinzufügen, wird es nicht korrekt gespeichert, da das Formular nicht mehr mit dem AccountImport Objekt übereinstimmt.

Wenn ich eine Vorlage manuell erstellen und die zusätzlichen Felder auf diese Weise spleißen, werfe ich alle Sachen weg, die der Admin-Generator mir kostenlos gibt (d. H. Formatierung, "Zurück zur Liste" -Schaltfläche, Speichertasten).

Was ist eine "gute" Art zu tun, was ich versuche zu tun?

+1

Willkommen, wo Frameworks eine Last werden. Hoffentlich hat jemand anderes dieses Problem bereits gelöst ... – DampeS8N

+1

Pshaw @ DampeS8N. Symfony behandelt das eigentlich ziemlich elegant. – Nathan

+0

Ich meinte in dem grandiosen Schema der Dinge. Wenn dein Framework nicht das macht, was du willst, ist das das schlimmste Gefühl auf der Welt. Und du musst nur zu Baal und Belial beten, dass jemand anders es repariert hat. Wenn das nicht Symphonie-Niedergang wäre. Etwas anderes ist. :) – DampeS8N

Antwort

1

Wenn Sie zusätzliche Felder in generator.yml definieren, können Sie eine der Admin-Generator-Aktionen überschreiben, um die gewünschten Felder zu bearbeiten.

Blick auf die erzeugte actions.class.php in cache/yourapp/YOURENV/modules/autoYOURMODULE/Aktionen/actions.class.php. Sie können diese Funktionen mit Ihren eigenen Funktionen in apps/YOURAPP/modules/YOURMODULE/actions/actions.class.php überschreiben, da sie von dieser zwischengespeicherten Datei erbt. Wenn Sie Änderungen an generator.conf vornehmen, wird die zwischengespeicherte Datei aktualisiert, aber Ihr Code überschreibt sie weiterhin. Sie möchten wahrscheinlich processForm() überschreiben.

Ich habe ein Beispiel dafür in step 5 at this blog post:

protected function processForm(sfWebRequest $request, sfForm $form) 
{ 
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName())); 

    if ($form->isValid()) 
    { 
$notice = $form->getObject()->isNew() ? 'The item was created successfully.' : 'The item was updated successfully.'; 

// NEW: deal with tags 
if ($form->getValue('remove_tags')) { 
    foreach (preg_split('/\s*,\s*/', $form->getValue('remove_tags')) as $tag) { 
    $form->getObject()->removeTag($tag); 
    } 
} 
if ($form->getValue('new_tags')) { 
    foreach (preg_split('/\s*,\s*/', $form->getValue('new_tags')) as $tag) { 
    // sorry, it would be better to not hard-code this string 
    if ($tag == 'Add tags with commas') continue; 
    $form->getObject()->addTag($tag); 
    } 
} 

try { 
    $complaint = $form->save(); 
    // and the remainder is just pasted from the generated actions file 

Als ich erkannte ich die generierten Dateien im Cache zu sehen, genau lesen konnte, was der Admin-Generator tat, und dass ich einen Teil außer Kraft setzen könnte Sie haben mich mit dem Admin-Generator produktiver gemacht.

0

Ich nehme an, Sie haben die zusätzlichen Felder als Widgets zu Ihrem Formularobjekt hinzugefügt, aber haben Sie auch ihre Validatoren hinzugefügt?

Egal, welche Formularfelder Sie in das Formularobjekt einfügen, solange die Datei generator.yml die Einstellungen des Formulars nicht überschreibt (dh Sie setzen keinen Wert für den Schlüssel [new|form|edit].display in dieser Datei) sollte erfolgreich auf gültige Eingabe gespeichert werden.