Hulp bij structureren project: validatie en normalisatie

Overzicht

Sponsored by: Vacatures door Monsterboard

16/03/2017 14:58:23
Anchor link
Ik ben bezig met een applicatie voor een orkest waarbij door middel van een formulier 2 type personen toegevoegd moeten kunnen worden: vrijwilligers en muzikanten. Elke persoon heeft een foto. De applicatie moet verder een lijst van alle personen kunnen laten zien en elke persoon apart.

Ik heb dus een abstracte Persoon class gemaakt en die ge-extend naar een concrete Vrijwilliger en Muzikant class. Ik heb een Singleton voor de database connectie en een class met database queries om de verschillende objecten in de database op te kunnen slaan. Tot zo ver geen probleem.

Verder wil ik het Front Controller pattern gebruiken, dus door middel van een htaccess file alle URLs redirecten naar 1 php file en die file dan laten bepalen welke actie er uitgevoerd moet worden.



Waar ik niet uitkom is het volgende:

In de actie waarbij er een formulier verzonden is om een nieuwe Vrijwilliger/Muzikant toe te voegen, waar laat ik de validatie en normalisatie van de ingevulde gegevens uit het formulier?

Moet ik een apart object maken dat ik de $_POST en $_FILES arrays doorgeef en dat dan een Vrijwilliger/Muzikant object teruggeeft?

Of geef ik de $_POST en $_FILES arrays door aan de constructor van een Vrijwilliger/Muzikant object en laat ik dat dan de validatie en normalisatie doen? De foto in de $_FILES array moet echter gevalideerd worden en daarna opgeslagen op een andere locatie en het lijkt me gewoon niet logisch dat dat allemaal in een Vrijwilliger/Muzikant object gebeurt?

Wat is de beste aanpak hiervoor?
Gewijzigd op 16/03/2017 14:59:41 door
 
PHP hulp

PHP hulp

24/12/2024 06:10:46
 
Thomas van den Heuvel

Thomas van den Heuvel

17/03/2017 01:37:02
Anchor link
Is het voorgeschreven hoe dit opgelost zou moeten worden? Is het belangrijk hoe het opgelost wordt of dat het opgelost wordt?

Het komt nu een beetje over dat je een klus hebt, en je hebt je voorgenomen dit met specifiek gereedschap en met een bepaalde werkwijze op te lossen. Nu loop je vast in je aanpak / met je gereedschap.

Mijn eerste ingeving zou dan zijn om het gereedschap te veranderen en/of te vereenvoudigen.

Dat gezegd hebbende: zijn formulieren en formulier-elementen ook klassen/objecten? Het lijkt mij pas zinnig om informatie over de schutting te gooien (naar wat voor afgeleide van de Persoon-klasse dan ook) nadat je hebt vastgesteld dat je invoer volledig en kloppend is.
 
Ward van der Put
Moderator

Ward van der Put

17/03/2017 07:18:10
Anchor link
Voor object creation gebruik je in objectgeoriënteerd programmeren creational patterns. Misschien is een factory of builder de eerste bouwsteen die je mist.

Daarnaast lijk je nog andere abstracties te missen, zoals Thomas ook al aankaart, want je zou $_GET en $_POST eigenlijk nooit rechtstreeks moeten gebruiken. Daarvoor bouw je bijvoorbeeld een eenvoudig Request-object of een uitgebreider stelsel van klassen voor HTTP-messaging.
 

17/03/2017 11:44:23
Anchor link
Thomas van den Heuvel op 17/03/2017 01:37:02:
Is het voorgeschreven hoe dit opgelost zou moeten worden? Is het belangrijk hoe het opgelost wordt of dat het opgelost wordt?

Het komt nu een beetje over dat je een klus hebt, en je hebt je voorgenomen dit met specifiek gereedschap en met een bepaalde werkwijze op te lossen. Nu loop je vast in je aanpak / met je gereedschap.

Mijn eerste ingeving zou dan zijn om het gereedschap te veranderen en/of te vereenvoudigen.

Dat gezegd hebbende: zijn formulieren en formulier-elementen ook klassen/objecten? Het lijkt mij pas zinnig om informatie over de schutting te gooien (naar wat voor afgeleide van de Persoon-klasse dan ook) nadat je hebt vastgesteld dat je invoer volledig en kloppend is.

Er is niet voorgeschreven hoe ik dit moet oplossen, dat mag ik zelf uitzoeken. Ik dacht dat ik op de juiste weg zat met de objecten die ik tot nu toe bedacht had, maar misschien ook niet.

Hoe zou jij dit project aanpakken? Welke objecten zou jij gebruiken en hoe werken die met elkaar samen?
De invulling van de objecten lukt me zelf wel, maar ik mis het grote plaatje: hoe structureer ik dit project?
 
Ward van der Put
Moderator

Ward van der Put

17/03/2017 12:59:33
Anchor link
Topicstarter op 16/03/2017 14:58:23:
Ik heb dus een abstracte Persoon class gemaakt en die ge-extend naar een concrete Vrijwilliger en Muzikant class. Ik heb een Singleton voor de database connectie en een class met database queries om de verschillende objecten in de database op te kunnen slaan. Tot zo ver geen probleem.

- abstract class AbstractPersoon
- class Vrijwilliger extends AbstractPersoon
- class Muzikant extends AbstractPersoon
- interface SingletonInterface
- class Database extends PDO implements SingletonInterface

Dat is alvast een goed begin, maar waarom één klasse met alle queries? Je mist daar een data mapper of data access object (DAO).

Als je één index.php als de front controller wilt gebruiken, heb je nog klassen nodig voor de routing naar andere controllers. De front controller moet daarmee taken aan specifieke controllers delegeren.
Gewijzigd op 13/09/2017 10:08:55 door - Ariën -
 

19/03/2017 20:38:51
Anchor link
Als ik het goed begrijp is een Request object dus een soort van wrapper om de $_POST (en $_FILES?) array met getters om bij de informatie te kunnen komen?

Ik denk dat ik dan een Form object maak dat die functie heeft, want dat vind ik duidelijker qua naam. Dus 1 abstracte Form class en 2 extends voor de 2 formulieren die ik heb (VrijwilligerForm en MuzikantForm). Die objecten kunnen dan controleren of de $_POST array voor hun formulier klopt en de foto uit de $_FILES array valideren en verplaatsen.

En dan doe ik de overige validatie en normalisatie in de Persoon/Muzikant/Vrijwilliger klassen want dat lijkt me daarvoor de meeste logische plaats.

Is dat een goede opzet?
 
Ward van der Put
Moderator

Ward van der Put

20/03/2017 07:06:47
Anchor link
Een 'fysiek' <form> is natuurlijk iets anders dan de formulierdata die je daarmee vervolgens verwerkt. Als je een Request-object daarvoor te algemeen vindt, zou je bijvoorbeeld een Form-object naast een FormProcessor-object kunnen gebruiken. Dan is ook meteen duidelijk waar die validaties in horen.
 
Ricky stutgard

ricky stutgard

14/02/2020 06:31:52
Anchor link
k heb graag hulp nodig om deze normalisatie

0de nv: kaartnum, datum reg, fam naam, voornaam, nationaliteit, ID/pp num, adres, geslacht, beroep, geb.dat, bloedgroep, allergie, chronische Ziekten, medicijnen, verzekerd, verz.maatschapij, verz.num, verval.datum, RG(datum, klacht, behandeling)

door te verwerken tot de 3e NV maar ik begrijp het helemaal niet...kan iemand mij aub helpen.
alvast bedankt.
 
- Ariën  -
Beheerder

- Ariën -

14/02/2020 09:05:29
Anchor link
Dan raad ik aan een nieuwe topic te starten, en geen oud topic omhoog te halen. Dit leidt tot verwarring bij mensen die hier reageren. Dit topic zal ik nu sluiten.
 
 

Dit topic is gesloten.



Overzicht

 
 

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.