[PHP/ZF] Dynamisch formulier

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Storeman storeman

storeman storeman

18/12/2008 14:18:00
Quote Anchor link
Met behulp van Zend Form heb ik al diverse formulieren gebouwd en de simpele formulieren gaan perfect, ik kan niet meer zonder. De complexe formulieren had ik er eerst in gehackd dmv views, maar dan mis ik toch wat flexibiliteit die ik met een Form object wel heb.

Ik zal gelijk even de situatie omschrijven zodat duidelijk is waar de schoen wringt.

Ik heb een formulier om vliegtickets te boeken met diverse velden als aantal volwassenen, kinderen, tarieven, toeslagen, enz enz. Ook bevat de ticket één of meerdere segmenten een segment bestaat uit een vertrekplaats, aankomstplaats en vertrekdatum. Door middel van JS kan een gebruiker extra regels aanmaken en regels verwijderen.

Nieuwe tickets toevoegen zal nog wel gaan, maar bewerken wordt lastig. Als volgt:

In mijn huidige formulier laat ik PHP de segmenten ophalen dmv een statische functie in de ticketController, deze geeft een recordset terug (aan de hand van de opgevraagde ticket). Voor elk record voeg ik een nieuwe regel toe aan het 'subformulier', zodoende wordt elk segment getoond en is deze te bewerken.

In de nieuwe methode, dus OOP icm Zend_Form maak ik gebruik van een viewScript om de zaak te renderen (dit omdat het formulier dermate complex is dat decorators de overzichtelijkheid zouden verslechteren). Dit gaat goed tot het punt van de segmenten.

Even een stukje code uit de losse pols zoals het nu gaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<tr>
   <td><input type="text" name="segments[34][flightdate]" value="10-10-2009"></td>
   <td><input type="text" name="segments[34][from]" value="Amsterdam"></td>
   <td><input type="text" name="segments[34][to]" value="JFK"></td>
</tr>
<tr>
   <td><input type="text" name="segments[new][flightdate][]"></td>
   <td><input type="text" name="segments[new][from][]"></td>
   <td><input type="text" name="segments[new][to][]"></td>
</tr>


De onderste rij wordt net zo vaak aangemaakt als de gebruiker wil dmv JS en wordt door de 'new' key toegevoegd aan de DB. ID's die voorheen bestonden en niet meer zijn gepost worden verwijderd, overige data wordt geupdate. Werkt soepel tot zover.

Ik heb nu echter geen idee hoe ik dit met Zend_Form op kan lossen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class FlightForm extends Zend_Form{

    public function __construct(){
        parent::__construct();
    }


    public function addSegment( xxx ){
        // Add flightsegment elements
        $this->addElement
    }
}
[
/code]

Ik zie alleen niet hoe ik hier doorheen zou kunnen lopen met een loop oid in het view script.

Heeft iemand een clou?
 
Er zijn nog geen reacties op dit bericht.



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.