[PHP/Zend Framework]Form invullen aan de hand van model

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In Zend Framework bestaat er een functie om forms in te vullen aan de hand van een array, die op deze manier gebruikt wordt:

PHP:
1
2
3
4
5
6
7
8
$form = new Application_Form_Example();

$formData = array (
    'id' => 1,
    'title' = 'Example'
);

$form->populate($formData);


Maar, ik wil het formulier invullen aan de hand van een model:

PHP:
1
2
3
4
5
6
7
8
class Application_Model_Example
{
    protected $_id;
    protected $_title;
    
    //Hier setters, getters etc

}


Nu heb ik zelf 2 manieren bedacht, maar ben met allebei niet echt tevreden:

Handmatig alles opgeven:
PHP:
1
2
3
4
5
6
7
8
9
$form = new Application_Form_Example();
$model = new Application_Model_Example(); //wordt normaal uit database gevuld

$formData = array (
    'id' => $model->getId(),
    'title' => $model->getTitle()
);

$form->populate($formData);


Een functie toArray/toFormData toevoegen aan het model, en deze dan aanroepen in de populate() functie:
PHP:
1
2
3
4
5
6
7
8
9
10
    public function toFormData()
    {
        $formData = array();

        foreach(get_object_vars($this) as $key => $value) {
            $formData[substr($key, 1)] = $value;
        }

        return $formData;
    }



Mijn vraag is nu, is er een betere oplossing?

Acties:
  • 0 Henk 'm!

Verwijderd

Maak een toArray() function op je models

Edit: sorry, niet goed gelezen, dit stelde je zelf maar voor. Anyway dat is de methode die ik gebruik, ook omdat zowel Zend_Db_Table als Doctrine deze methode standaard al hebben

[ Voor 71% gewijzigd door Verwijderd op 06-01-2011 16:51 ]


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Ik zou ook voor een toArray kiezen, of anders andersom, waarbij je het form object doorgeeft aan het model. Je eerste oplossing, alles handmatig ophalen met getters en setters, moet je die getters en setters houden in je object, en daar probeer ik persoonlijk wat af te stappen omdat er betere alternatieven zijn :p.

Acties:
  • 0 Henk 'm!

  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
Populate functie in de form overschrijven zou mijn voorkeur zijn.

Je overschrijft het form al dat hij specifiek voor jou model werkt, dus waarom zou je niet afdwingen om alleen een instance van dat model te kunnen gebruiken om hem te populaten? Daarnaast, als je een variable straks mist in je form, dan kan je hem in je form class toevoegen, anders moet je naar je model class, om de toArray functie aan te passen, wat niet logisch klinkt.

@Kage Doctrine 2 wordt aanbevolen een heeft standaard geen toArray functie in je models.

@YopY:
"of anders andersom, waarbij je het form object doorgeeft aan het model"
Nee, het is niet de verantwoordelijkheid van een model om een form te vullen. Dat is en blijft de verantwoordelijkheid van de form.

Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 14-09 21:13
Ik gebruik zelf altijd gewoon de ->toArray() functie op een Zend_Db_Table_Row, en wel als volgt:

PHP:
1
2
3
4
5
<?php

$row = $model->fetchRow($select);

$form->setDefaults( $row->toArray() );


Kolommen die wel in de tabel staan en geen velden zijn binnen het formulier, worden gewoon genegeerd.

[ Voor 20% gewijzigd door storeman op 07-01-2011 23:43 ]

"Chaos kan niet uit de hand lopen"