simple OOP formulier

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior Front-end developer (React)

Functie Met een ontwikkelafdeling van ruim 20 collega’s is dit zo ongeveer de helft van alle medewerkers. De software(ontwikkeling) is dan ook de drijvende kracht binnen de organisatie. Ze werken aan het verbeteren dan de bestaande, maar zeker ook nieuwe producten. De software bestaat uit verschillende (React) webapplicaties, maar ook een mobile (React native) app. Hierdoor kom je met verschillende uitdagingen in aanraking en is Mobile kennis natuurlijk mooi meegenomen. De software wordt door vele duizenden professionals dagelijks gebruikt en bevatten grote hoeveelheden data. Aan het team de uitdaging om hierin de best mogelijke gebruiksvriendelijkheid neer te zetten door gebruik

Bekijk vacature »

(Junior) Back-end Ontwikkelaar

Functie omschrijving We are looking for a dutch native speaker Altijd al willen werken bij een organisatie, die maatwerk applicaties bouwt, die echt impact hebben in de maatschappij? Dit is je kans. Voor een kleine organisatie in de regio van Eindhoven ben ik op zoek naar een C# Ontwikkelaar. Jij gaat aan de slag met de ontwikkeling van maatwerk software en applicaties. Deze organisatie werkt voor grote organisaties in Nederland, maar ook voor het MKB. De projecten waar je aan gaat werken zijn erg divers, waardoor je werk uitdagend blijft en je erg veel kan leren. Verder ga je aan

Bekijk vacature »

Java Front-end Developer

Dit ga je doen Ontwikkelen van nieuwe functionaliteiten in Java met tools als Springboot, MS SQL Server (T-SQL) en JavaScript; Het onderhouden van de (web-)applicaties binnen een complexe omgeving; Werken aan de migratie van een monolithisch systeem naar een architectuur gebaseerd op Kubernetes; Code reviews met collega's en actieve kennisuitdelingsessies voeren; Het uitvoeren van unit- en systeemtests Experimenteren met nieuwe tools en technieken. Hier ga je werken Binnen deze organisatie kom je te werken op de afdeling die gegevens verzamelt vanuit het hele land. Denk hierbij aan vertrouwelijke persoonsgegevens. Het team verwerkt al deze data met als doel het waarborgen

Bekijk vacature »

Front End Ontwikkelaar (React)

In het kort Als front end developer ga je aan de slag met maatwerkprojecten voor onze klanten. Denk bijvoorbeeld aan het toevoegen van een machine aan een database of het corrigeren van formulieren voor ingestuurde orders. Voorbeeld van zo’n project is Smart Link. De projecten waar je op ingezet kunt worden liggen binnen het technische domein waar jij als front end developer een grote rol speelt om samen met je back end collega’s de juiste oplossingen te leveren. please note that this particular role requires fluent Dutch language skills. Dit vind je leuk om te doen Het omzetten van designs

Bekijk vacature »

Database Developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als Database Developer met MS SQL of een vergelijkbare database? Wil jij werken voor een ambitieuze werkgever in regio Tilburg waar jij volledig de mogelijkheid krijgt jezelf te ontwikkelen? Lees dan snel verder! Hoe ziet jouw takenpakket eruit? Je gaat projecten gedurende het hele proces begeleiden. Je sluit aan bij afspraken met klanten om hun processen helder te krijgen. Vervolgens voer jij het project uit en zorgt dat dit zo goed mogelijk verloopt; Je werkt aan nieuwe softwareoplossingen die de logistieke processen verbeteren of vernieuwen; Je houdt je bezig met het ontwikkelen van

Bekijk vacature »

Full stack developer Node.js, React Remote

Functie Als fullstack JavaScript developer vind jij het uitdagend om op basis van concrete klantvragen nieuwe functionaliteiten te ontwikkelen. Bij voorkeur worden deze functionaliteiten op een bepaalde manier geprogrammeerd, zodat ze door meerdere klanten te gebruiken zijn. Je hebt dus vaak te maken met abstracte vraagstukken. Om dit te kunnen realiseren sta je nauw in contact met de product owner en/of klant. Je bent niet alleen onderdeel van het development team, maar hebt ook vaak contact met de product-owner en/of klanten om daardoor inzichten te verzamelen die leiden tot productverbeteringen. • Inzichten verzamelen bij de klant en/of product owner •

Bekijk vacature »

Front-end developer gezocht

Functie Je komt in een team met ambitieuze developers die de passie voor Front-End met jou delen. Samen ga je aan de slag met leuke en leerzame opdrachten. Het team heeft een eigen budget en financiën en zij bepalen zelf hoe dat besteed en investeert wordt. Je gebruikt tools als JavaScript, Node.js, React, Angular, Typescript en Vue.js wanneer je werkt aan de opdrachten. Daarnaast zul je veel leren van je collega’s en gezamenlijk een leuke tijd doorbrengen tijdens activiteiten zoals wintersport, hackatons en conferentiebezoeken. Je krijgt niet alleen de mogelijkheid Front-End te ontwikkelen, maar ook vooral jezelf. Dit kan behaald

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Android developer

De functie Schiphol is een plek om te reizen, te verblijven en te werken. Door middel van data en technologie richten we op al deze gebieden het leef- en werkklimaat optimaal in en zorgen we voor een slimmere en efficiëntere operatie. Wij ontwikkelen nieuwe producten en diensten vanuit de wensen en behoeften van onze klanten, voorspellen passagier flows en testen digitale oplossingen om rijen en andere pijnpunten in het proces te verminderen. Met slimme feedback van sensortechnologie maken we zelfs data van toiletten en stoelen inzichtelijk en bruikbaar. Het Commercial Platform bestaat uit multidisciplinaire teams met een end-2-end verantwoordelijkheid voor

Bekijk vacature »

UX Writer (m/v/d)

UX Writer (m/v/d) Everything we do, starts with you. Together with you, we build the most human-centric fintech. We have the ambition to create the next. And - with Bertelsmann - a strong foundation to start from. Let’s make it new – for society and for yourself. Wij zijn op zoek naar een UX Writer (m/v/d) Fulltime - Op ons kantoor in Amsterdam of Heerenveen / deels vanuit huis Als UX Writer bij Riverty hou jij je bezig met onze strategie om daar te zijn waar onze gebruikers zijn en op de manier waarop zij ons nodig hebben, terwijl wij

Bekijk vacature »

Junior .NET developer

Functie Ons programma is voor afgestudeerde enthousiastelingen die het als een uitdaging zien om met een klein dynamisch team bij de grootste bedrijven van Nederland aan de slag te gaan. Tijdens jouw dienstverband word jij begeleid door een talent manager. Het ontwikkelen van jouw talent staat hierbij centraal. Het programma doorloop je met een team van circa 8 Mede- trainees. De eerste maand start je met een fulltime inhouse opleiding. Deze staat geheel in het teken van de werkzaamheden die jij verder in het programma zult uitvoeren. Na deze opleidingsmaand ga je aan de slag in een dynamische omgeving bij

Bekijk vacature »

C# .NET Developer

Dit ga je doen Als developer nieuwe gave features implementeren; Werken met technieken als C# .NET en (REST) API's webservices; Ontwikkelen van koppelingen middels API's; Maken van technische keuzes en beslissingen over de architectuur; Junior collega's coachen; Initiatief nemen voor nieuwe technische mogelijkheden; Je bent een belangrijke schakel - en vindt het leuk - om te schakelen met de business. Hier ga je werken In een klein team van professionals ben je als C# .NET Developer verantwoordelijk voor het ontwikkelen van één van de applicaties voor het grootste inhouse product: een applicatie voor alles omtrent hypotheken. De programmeertaal die je

Bekijk vacature »

OutSystems Developer

Dit ga je doen Het van scratch af aan ontwikkelen van applicaties met OutSystems; Het aanhaken bij diverse projecten binnen de organisatie; Schakelen met de business; Meedenken over de mogelijkheden van het platform binnen de organisatie. Hier ga je werken Deze organisatie is een toonaangevende speler in de vastgoedbranche en telt momenteel ruim 500 medewerkers. Met meer dan 150 applicaties staat er een complex applicatielandschap, bestaande uit standaard- en maatwerkapplicaties. De maatwerkapplicaties worden ontwikkeld door een inhouse development team. Het doel voor de komende periode is het verder vernieuwen en optimaliseren van het huidige applicatielandschap. Zo staat de organisatie aan

Bekijk vacature »

Outsystems Developer Junior

Dit ga je doen Bouwen aan nieuwe en innovatieve applicaties; Maken van koppelingen tussen Outsystems en het bestaande applicatielandschap; Troubleshooting op bestaande software. Hier ga je werken De organisatie is internationale speler binnen de bouwbranche en richt zich op de infrastructuur, zowel boven als onder de grond. Ze zijn ruim 1100 man groot en maken op IT vlak een mooie groei door. Als junior Outsystems Developer kom je te werken op een IT-afdeling van zo'n 25 man groot. Een aantal jaar geleden hebben ze de keuze gemaakt om zich meer te gaan richten op ontwikkeling en door de groei van

Bekijk vacature »

Front end developer Zorgplatform

Functie Jij als Front end ontwikkelen zult komen te werken samen met 1 PHP ontwikkelaar, 1 Python developer en een flexibele schil aan ontwikkelaars . Samen ga je ervoor zorgen dat de huidige producten doorontwikkeld worden. De Marketplace is geschreven in PHP Laravel en in de front end React. De roostersoftware is ontwikkeld in Python in combinatie met React in de front end. Jij zult als Front ender dus voornamelijk bezig zijn met het verbeteren van onze interfaces op onze verschillende producten. Momenteel ligt de uitdaging in het feit dat de roostersoftware breder schaalbaar moet worden zodat het voor meerdere

Bekijk vacature »

Pagina: 1 2 volgende »

Bas D L

Bas D L

05/11/2012 10:23:42
Quote Anchor link
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
class cForm
{
    //var form tag
    private $_TagAction;
    private $_TagMethod;
    private $_TagName;
    private $_TagExtraAttr;
    
    //var form field
    private $_FieldType;
    private $_FieldName;
    private $_FieldValue;
    private $_FieldChecked;
    
    //var select tag
    private $_SelectName;
    private $_SelectOption;
    private $_SelectOptionSelected;
    
    //var button
    private $_ButtonValue;
    private $_ButtonName;

    public function __construct( $_TagAction , $_TagMethod , $_TagName , $_TagExtraAttr ){
        $this->_TagAction = $_TagAction;
        $this->_TagMethod = $_TagMethod;
        $this->_TagName = $_TagName;
        $this->_TagExtraAttr = $_TagExtraAttr;
        
    }


    public function getTagOpen(){
        return '<form action="' . $this->_TagAction . '" method="' . $this->_TagMethod . '" name="' . $this->_TagName .'" ' . $this->_TagExtraAttr . '>' . PHP_EOL;
    }

    
    public function setFormField( $FieldType , $FieldName , $FieldValue , $FieldChecked ){
        $this->_FieldType = $FieldType;
        $this->_FieldName = $FieldName;
        $this->_FieldValue = $FieldValue;
        $this->_FieldChecked = $FieldChecked;
    }
    
    
    public function getFormField(){
        return '<input type="' . $this->_FieldType . '" name="' . $this->_FieldName . '" value="' . $this->_FieldValue . '" ' . $this->_FieldChecked . '>'. PHP_EOL;
    }


    public function setSelectOpen($SelectName){
        $this->_SelectName = $SelectName;
    }

    public function getSelectOpen(){
        return '<select name="'.$this->_SelectName.'">';
    }


    public function setSelectOption( $SelectOption ,$SelectOptionSelected ){
        $this->_SelectOption = $SelectOption;
        $this->_SelectOptionSelected = $SelectOptionSelected;
    }


    public function getSelectOption(){
        return '<option' . $this->_SelectOptionSelected . '>' . $this->_SelectOption . '</option>' . PHP_EOL;
    }

    
    public function getSelectEnd(){
        return '</select>' . PHP_EOL;
    }


    public function setButton( $ButtonValue , $ButtonName ){
        $this->_ButtonValue = $ButtonValue;
        $this->_ButtonName = $ButtonName;
    }


    public function getButton(){
        return '<input type="submit" value="' . $this->_ButtonValue . '" name="'. $this->_ButtonName .'">' . PHP_EOL;
    }


    public function getTagEnd(){
        return '</form>' . PHP_EOL;
    }
    
}


$objForm = new cForm( '/' , 'post'  , 'test' , 'onsubmit="test"' );

//form start
echo $objForm->getTagOpen();

//text field
$objForm->setFormField('text','2', '' , '');
echo $objForm->getFormField();

//checkbox
$objForm->setFormField('checkbox','2', '' , 'checked="checked"');
echo $objForm->getFormField();

//selectbox

    // start selectbox

    $objForm->setSelectOpen('bas');
    echo $objForm->getSelectOpen();

    // option selectbox
    $objForm->setSelectOption('bas', ' selected');
    echo $objForm->getSelectOption();
    $objForm->setSelectOption('123', '');
    echo $objForm->getSelectOption();
    $objForm->setSelectOption('456', '');
    echo $objForm->getSelectOption();

    //end selectbox
    echo $objForm->getSelectEnd();

//button
$objForm->setButton('test type','test name' );
echo $objForm->getButton();

//form end
echo $objForm->getTagEnd();
?>
Gewijzigd op 05/11/2012 13:53:47 door Bas D L
 
PHP hulp

PHP hulp

27/05/2026 09:16:40
 
Wouter J

Wouter J

05/11/2012 13:51:23
Quote Anchor link
En nu?

Kun je aub 1 code blok verwijderen?
 
Bas D L

Bas D L

05/11/2012 13:54:47
Quote Anchor link
@wouter, done...
 
Wouter J

Wouter J

05/11/2012 13:55:31
Quote Anchor link
En dan nu de eerste vraag, wat moeten we hier mee?
 
Bas D L

Bas D L

05/11/2012 13:59:16
Quote Anchor link
Doordat ik de code heb gewijzigd is mijn vraag verdwenen :-$

Ben net begonnen met OOP get en Set.
Mijn vraag is of dit zo de juiste opzet is in OOP, of dat het geen OOP is of nog beter/naders kan.
 
Wouter J

Wouter J

05/11/2012 14:02:30
Quote Anchor link
Dit is totaal geen OOP, alleen maar een mooie klasse met functies erin.

En je hebt het de hele tijd over het leren van 'get' en 'set', maar je weet dat dat gewoon maar 2 functies zijn? We hebben ze een speciale naam gegeven omdat deze functies de meest voorkomende taken uitvoeren, eigenschappen instellen en verkrijgen. Maar van de rest is er niks vreemdst aan.

Qua OO heb je je te houden aan 1 hele grote basis regel: Elke klasse en elke methode heeft maar 1 verantwoordelijkheid, zodra er meer zijn splits je het op in meerdere klassen of meerdere methoden.
In jou geval heb je alles in 1 klasse gezet wat enorm indruist tegen deze regel. Schrijf allereerst maar eens op welke verantwoordelijkheden/taken je in deze applicatie hebt.
 
Gerard M

Gerard M

05/11/2012 14:03:24
Quote Anchor link
Interpretaties van OOP kunnen verschillen, maar ik zou zelf van buttons en inputfields ook losse classes maken. Buttons en inputfields kunnen zelfs een gemeenschappelijke superclass delen. Op deze manier zijn alle objecten verantwoordelijk voor hun eigen gedrag.

Het lastige is, "hoe praktisch is dit?" Want misschien wil je jouw inputfields in a een tabel of div stoppen, met de volgende code zal dat niet makkelijk lukken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$form
= new Form();
$form->add(new InputField("username");
$form->add(new InputField("password");
$form->add(new Button("click me"));

print $form->getHtml();
?>


Natuurlijk kan je dan van al je HTML tags ook classes maken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$form
= new Form();
$div  = new Div();

$form->add($div);

// Form fields are nested in a div, which is nested in a form.
$div->add(new InputField("username"));
$div->add(new InputField("password"));
$div->add(new Button("click me"));

print $form->getHtml();
?>


Nu kan je doorgaan totdat je helemaal geen HTML meer ziet! Hoe praktisch dat is, laat ik in het midden. Kijk bijvoorbeeld eens naar: http://www.php.net/manual/en/intro.dom.php

Om terug te komen op jouw code, probeer er voor te zorgen dat Form zich alleen bezig houdt met zichzelf, en dat hij zo min mogelijk bewust is van de status van buttons en andere inputfields. Properties als "_ButtonValue" of "_FieldType" horen d'r niet in thuis. Denk ook eens na hoe goed jouw huidige setup werkt als je dropdown boxes, radio knoppen en checkboxes wilt toevoegen.
 
Bas D L

Bas D L

05/11/2012 14:14:47
Quote Anchor link
@Wouter en Gerard,
Kunnen jullie me een klein beetje op weg helpen dmv een goed formulier voorbeeldje?

@wouter
lijstje:
form start
form end
input fields
select
button
Gewijzigd op 05/11/2012 14:31:21 door Bas D L
 
Wouter J

Wouter J

05/11/2012 14:44:48
Quote Anchor link
Bas, al redelijk in de buurt. Als je het globaal neemt zou ik dit zeggen:

- FormRenderer (deze maakt de HTML van het formulier)
- FormElement (alle mogelijke elementen voor een formulier)
- FormBuilder (creëert een formulier)

Vervolgens heeft elke verantwoordelijkheid weer meerdere klassen. Zo kan je een HTMLFormRenderer maken of een andere formrenderer, kan zo snel even niks verzinnen. En een InputElement en een SelectElement die weer heel veel OptionElement klassen heeft en een ButtonElement.

De code wordt dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$formBuilder
= new FormBuilder();

$formBuilder
    ->add('name', 'text')
    ->
add('message', 'textarea')
;


$formFactory = new HTMLFormFactory($formBuilder);

echo $formFactory->render();
?>


In FormBuilder::add() maak je dan gebruik van de InputElement ect. om een element toe te voegen.
 
Bas D L

Bas D L

05/11/2012 14:53:27
Quote Anchor link
@Wouter,

Krijg je dan zo'n klasse-indeling?
class FormRenderHtml
{

}

class FormRenderElement
{
}

class FormBuilder
{
}
 
Wouter J

Wouter J

05/11/2012 15:09:44
Quote Anchor link
Dan ga je werken met overerving. Dat betekend dat 1 klasse alles van de andere klasse bevat, maar dat kan bewerken. Dat doe je met het extends keyword (wat uitbreiden betekend). Bijvoorbeeld:
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
class A
{
    public function foo()
    {

        return 'Foo!!';
    }
}


class B
{
    public function bar()
    {

        return 'Bar!!';
    }
}


$a = new A();
echo $a->foo(); // Foo!!

$b = new B();
echo $b->bar(); // Bar!!

// klasse C breidt klasse A uit, het krijgt alleen methoden en properties

class C extends A
{
    public function baz()
    {

        return 'Baz!!';
    }
}


$c = new C();
$c->foo(); // doordat C de A klasse uitbreid heb je gewoon toegang tot de methoden van A
$c->baz(); // maar ook zijn eigen methoden werken

// je kan ook methoden veranderen:

class D extends B
{
    // we 'overwriten' de bar() functie in B
    public function bar()
    {

        return 'Bar from class D!!';
    };
}


$d = new D();
echo $d->bar(); // deze roept de nieuwe methode aan in class D
?>


Dit ga je nu ook gebruiken in dit geval. Je hebt een hoofdklasse die je FormRenderer noemt. Deze klasse bevat alle functies die in elke renderer gelijk zijn. Vervolgens breiden we deze klasse uit in een andere klasse als HTMLFormRenderer die de methoden bevat speciaal voor een HTML form. Voorbeeldje:
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
class FormRenderer
{
    private $builder;

    public function __construct(FormBuilder $builder)
    {

        $this->setBuilder($builder);
    }


    public function setBuilder(FormBuilder $builder)
    {

        $this->builder = $builder;
    }


    public function getBuilder()
    {

        return $this->builder;
    }
}


class HTMLFormRenderer extends FormRenderer
{
    public function render()
    {

        $builder = $this->getBuilder();
        $html = '<form>';

        foreach ($builder->getElements() as $element) {
            $html .= $element->render();
        }


        $html = '</form>';

        return $html;
    }
}

?>


Het is goed mogelijk dat je iets niet begrijpt, zou je dan aub gericht willen uitleggen wat je niet begrijpt dan kunnen we je verder helpen om het wel te begrijpen.
Gewijzigd op 05/11/2012 15:18:40 door Wouter J
 
Bas D L

Bas D L

05/11/2012 15:17:33
Quote Anchor link
Onderstaand snap ik niet :-(
1. public function __construct(FormBuilder $builder) |--> FormBuilder $builder
2. Waar is de class FormRenderer?
 
Wouter J

Wouter J

05/11/2012 15:21:10
Quote Anchor link
Quote:
1. public function __construct(FormBuilder $builder) |--> FormBuilder $builder

Door er FormBuilder voor te zetten eisen we dat de variabele $builder als waarde een instance van de FormBuilder bevat. Wat minder ingewikkeld met voorbeelden:
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
18
19
20
21
22
23
<?php
class A
{
}


class B
{
    public function foo(A $object)
    {

        // ...
    }
}


$b = new B();

$b->foo('Hello'); // geeft error, de parameter $object moet een instance van A zijn

$b->foo(new A()); // correct, de parameter $object is nu een instance van A

$a = new A();

$b->foo($a); // correct, de parameter $object is een instance van A (omdat $a een instance van A is)
?>


Quote:
2. Waar is de class FormRenderer?

Dat was een typfout van mij, ik heb het nu aangepast
 
Bas D L

Bas D L

05/11/2012 15:29:11
Quote Anchor link
Dus bij 1. stop je als het ware class a in class b?
Wat ik erg lastig vind is hoe ik dan nu een class FormBuilder moet maken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
class FormBuilder
{
    public function __construct( $FieldType , $FieldName , $FieldValue , $FieldChecked ){
        $this->_FieldType = $FieldType;
        $this->_FieldName = $FieldName;
        $this->_FieldValue = $FieldValue;
        $this->_FieldChecked = $FieldChecked;
    }    
    
    public function getElements(){
        return '<input type="' . $this->_FieldType . '" name="' . $this->_FieldName . '" value="' . $this->_FieldValue . '" ' . $this->_FieldChecked . '>'. PHP_EOL;
    }
}
Gewijzigd op 05/11/2012 15:30:43 door Bas D L
 
Wouter J

Wouter J

05/11/2012 15:34:27
Quote Anchor link
Ja, je stopt class A in B en vanuit daar kun je hem gewoon gebruiken. FormBuilder ziet er niet zo uit. Want je stopt nu weer 2 verantwoordelijkheden in elkaar. Welke 3 hadden we nou net?
1) Builder
2) Elements
3) Renderer

De Elements zijn een veld, die bezitten dus al die eigenschappen. In de FormBuilder klasse hou je nu een array bij met alle elementen erin en die geef je terug met getElements().
 
Bas D L

Bas D L

05/11/2012 15:38:36
Quote Anchor link
En hoe doe ik dat laatste?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
array('type','name','value','checked');
 
Wouter J

Wouter J

05/11/2012 15:47:31
Quote Anchor link
Gewoon zoiets:
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 FormBuilder
{
    private $elements = array();

    // ...

    public function addElement(FormElement $element)
    {

        $this->elements[] = $element;
    }


    public function getElements()
    {

        return $this->elements;
    }
}
 
Bas D L

Bas D L

05/11/2012 15:50:39
Quote Anchor link
@wouter, is het zo hoe het moet?

$formBuilder->addName('test 1');
$formBuilder->addTypes('text');

$formBuilder->addName('test 2');
$formBuilder->addTypes('text');

Hoe kan ik trouwens simpeler maken?

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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
class FormBuilder
{
    private $name = array();
    private $types = array();

    public function addName($element)
    {

        $this->name[] = $element;
    }


    public function getName()
    {

        return $this->name;
    }


    public function addTypes($type)
    {

        $this->types[] = $type;
    }


    public function getTypes()
    {

        return $this->types;
    }
}


class FormRenderer extends FormBuilder
{
    private $builder;

    public function __construct($builder)
    {

        $this->setBuilder($builder);
    }

 
    public function setBuilder($builder)
    {

        $this->builder = $builder;
    }


    public function getBuilder()
    {

        return $this->builder;
    }
}


class HTMLFormFactory extends FormRenderer
{
    public function render()
    {

        $builder = $this->getBuilder();
        $html .= '<form>';
        
        print_r($builder->getName());
        $html .= '<input ';
        foreach ($builder->getName() as $name) {
            $html .= 'name="'.$name.'" ';            
            foreach ($builder->getTypes() as $types) {
                $html .= 'type="'.$types.'">';
            }
       }


        $html .= '</form>';

        return $html;
    }
}


$formBuilder = new FormBuilder();

$formBuilder->addName('test 1');
$formBuilder->addTypes('text');

$formBuilder->addName('test 2');
$formBuilder->addTypes('text');

$formFactory = new HTMLFormFactory($formBuilder);

echo $formFactory->render();
?>
Gewijzigd op 05/11/2012 18:58:08 door Bas D L
 
Bo Ter Ham

Bo Ter Ham

05/11/2012 19:48:42
Quote Anchor link
Is het niet handig om ook nog validatie in het oog te houden?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$form
= new Form();
$input = new Form_Element_Input('eenveldnaam');
$input->setRequired(true)
      ->
setMinLength(5);
$form->addElements(array($input));
?>
 
Bas D L

Bas D L

05/11/2012 19:52:49
Quote Anchor link
@Bo, helemaal eens.
Weet jij hoe ik deze code kan verkleinen? Zie bovenstaande classes

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$formBuilder
->addName('test 1');
$formBuilder->addTypes('text');

$formBuilder->addName('test 2');
$formBuilder->addTypes('text');
?>
Gewijzigd op 05/11/2012 19:53:15 door Bas D L
 
Wouter J

Wouter J

05/11/2012 19:58:20
Quote Anchor link
Bas, na mijn mening doe je nu toch totaal iets anders als waar we toenet mee geëindigd zijn? De FormBuilder heeft toch geen name en type als eigenschappen? Zijn dat niet de eigenschappen een FormElement?

Bo, dat hoort niet gedaan te worden door een Form klasse en ook niet door een FormElement klasse. Daar heb je speciale Validator klassen voor nodig.
 

Pagina: 1 2 volgende »



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.