Request class en Form class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Joakim Broden

Joakim Broden

14/04/2013 14:43:20
Quote Anchor link
Ik ben bezig met een form class en de opbouw ziet er zo uit.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
Framework\
- Form\
  - Elements\
    - AbstractElement.php
    - Textarea.php
    - Text.php
  - Exceptions\
  - Form.php

Alleen ik zit met de vraag of ik hier een request class bij moet maken en waar ik die dan mee moet geven. Want ik heb een paar keer in deze class $_SERVER en $_POST nodig. Zoals om te kijken of het formulier verstuurd is, zoja valideer de velden (aan de hand van een validaton class). Als het formulier verstuurd is en maar nog niet compleet is wil ik aan de hand van $_POST de ingevulde waardes in de elementen zetten.

Alleen zouden jullie dit in de form class allemaal doen, dus de request class in de constructor mee geven van de form class, en dan de request class ook weer mee geven in de constructor van een element zelf. Of zouden jullie dit allemaal buiten de class doen?

Wie kan me helpen met een opzet? Hoe zouden jullie dit aanpakken?
Gewijzigd op 14/04/2013 14:45:02 door Joakim Broden
 
PHP hulp

PHP hulp

08/01/2025 17:21:15
 
Wouter J

Wouter J

14/04/2013 14:48:02
Quote Anchor link
Hoe ik het zou doen:
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
<?php
// de huidige request
$request = ...;
// maak form
$form = ...;

if ('POST' === $request->getMethod()) {
    $form->bind($request); // form haalt nu data op aan de hand van de request vars

    // form valideert de velden door de Validator class

    if ($form->valid()) {
        // ... doe wat leuks
    }
}

?>
 
Joakim Broden

Joakim Broden

14/04/2013 14:56:31
Quote Anchor link
Oke dus jij zegt eigenlijk dat ik buiten de class moet kijken of het formulier verstuurd is. Dan koppel ik de POST data aan de form class/elementen en dan pas valideren.

En hoe zou je dit bijvoorbeeld bij een language class doen? Ik heb namelijk een language class die kijkt naar de taal van de browser aan de hand van $_SERVER['HTTP_ACCEPT_LANGUAGE']. Bv in de constructor van language de request class mee geven?
 
Wouter J

Wouter J

14/04/2013 15:02:59
Quote Anchor link
Wat moet die Language class doen? Als het een i18n klasse is dan moet je de taal meegeven, die moet niks te maken hebben met de Request klasse.

En als het een klasse is om de taal vast te houden mag het niet eens een klasse zijn :)
Gewijzigd op 14/04/2013 15:06:54 door Wouter J
 
Joakim Broden

Joakim Broden

14/04/2013 15:08:08
Quote Anchor link
Die language class, haalt de taal van het framework op.

$language = new Language('nl'); <- set de taal op nederlands
$language = new Language('browser'); <- kijkt naar de taal van de browser en set daar de taal mee.

Aan de hand van die taal worden vertaal bestanden opgehaald en door gegeven aan een translator class.
 
- Raoul -

- Raoul -

14/04/2013 20:56:43
Quote Anchor link
Als je nl meegeeft moet hij zoeken in de lang dir naar het bestand nl.php of iets dergelijks.
Maar, browser? Nee. Zo zou ik het niet doen. Er bestaat toch geen browser.php?
Overigens zou ik het heel abstract maken en iets doen met adapters... een file adapter, array adapter, ...

En als je een language class wilt aanmaken met de taal van de browser is een factory de ideale use-case hiervoor :)
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
<?php

class LanguageFactory
{
    public function createFromBrowserLanguage()
    {

        switch($_SERVER['HTTP_ACCEPT_LANGUAGE']) {
            case
'nl':
                return new Language('nl');
                break;
            case
'en':
                return new Language('en');
                break;
        }
    }
}


?>
Gewijzigd op 14/04/2013 20:59:25 door - Raoul -
 
Wouter J

Wouter J

14/04/2013 21:14:00
Quote Anchor link
Je moet je goed afvragen of een klasse die alleen maar een waarde vasthoud wel een klasse mag zijn.
 



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.