[oop] mapper

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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 »

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 »

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 »

Junior .NET developer

Functie Wij hebben drie scrumteams. Het eerste team focust zich op het stukje hardware wat wij in huis doen. Zij maken als team o.a. gebruik van C++. De andere twee scrumteams zijn allebei bezig met data verwerking en maken hierbij in de backend gebruik van C# .NET / .NET Core. Het verschil tussen deze teams is dat één team de data verwerking doet voor de mobiele applicatie. Zij werken hierbij dus ook met Xamarin. Het andere team focust zich op de webapplicaties en maakt hierbij ook gebruik van ASP.NET MVC. Op basis van jouw ambities en kwaliteiten kijken wij samen

Bekijk vacature »

Product Developer (M/F), Fulltime 40 h/week

A global Plantbased revolution – that is our dream. Maximising the protein transition – that is our mission. Producing and developing sustainable and delicious products – that is what we do. Ojah is a fast growing company with a mission and has the ambition to be the world leader in its field. To support this growth we are hiring new colleagues. People that would like to make a difference and dare to dream big. With currently a 150 colleagues proudly working on our exceptional products. Working in a dynamic surrounding that runs full speed ahead. We need you! Product Developer

Bekijk vacature »

C# .NET developer voor innovatieve applicaties gez

Bedrijfsomschrijving Deze werkgever houdt zich al ruim 20 jaar bezig met het ontwikkelen van innovatieve software en dat willen ze graag nog lang doorzetten. En dat merk je ook als je als .NET developer hier aan de slag gaat. De applicaties worden continu doorontwikkeld met altijd als uitgangspunt dat zowel de kwaliteit als het gebruikersgemak van hoog niveau is. Het bedrijf telt inmiddels ruim 25 medewerkers waarvan meer dan de helft op de development afdeling werken. Meer weten over deze werkgever? Mail naar [email protected] of bel 0657578548 Functieomschrijving Je komt te werken in een Scrum team met andere .NET developers

Bekijk vacature »

SQL database developer

Functie omschrijving Voor een software bedrijf in omgeving Breda zijn wij op zoek naar een SQL database ontwikkelaar. Dit bedrijf bouwt applicaties om processen in distributiecentra te optimaliseren. Ter uitbreiding van het huidige team developers zijn wij op zoek naar een SQL database ontwikkelaar. De klanten van dit groeiende bedrijf zitten door heel Europa en jouw werkzaamheden zullen er als volgt uitzien: Het samenstellen van de software op basis van de input vanuit de klant (T-SQL & C#.NET). Het bezoeken van klanten om de processen en mogelijkheden in kaart te brengen. Het ontwerpen van databases met T-SQL als programmeer laag.

Bekijk vacature »

Senior .Net developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als .Net Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling. Mede hierdoor zij wij dit jaar Microsoft Partner of the year geworden. Sogetisten staan klaar voor elkaar, hebben lol met elkaar en daarmee behalen we de mooiste resultaten! Werken bij Sogeti

Bekijk vacature »

Medior Front-end Developer

Bij Getnoticed doen wij wat we leuk vinden, websites bouwen en online marketing. Voor veel van onze klanten doen we dan ook allebei. Wel zo fijn om campagnes te draaien voor conversiegerichte websites die in eigen beheer zijn. In onze vestiging in Nederweert zit onze development afdeling en worden de websites gebouwd. Op dit moment zijn we op zoek naar jou: dé Medior Front-end Developer die net als wij, het hoofd boven het maaiveld durft uit te steken! In het kort Even een paar punten die omschrijven wat deze toffe baan inhoudt: Het uitwerken van designs tot functionele layouts Je

Bekijk vacature »

.NET Developer

Functie omschrijving .NET developer met ervaring gezocht! Voor een softwarebedrijf in de regio Veenendaal zijn wij op zoek naar een .NET developer met een aantal jaar ervaring. Jij bent zowel zelfstandig als in teamverband verantwoordelijk voor het ontwikkelen en verbeteren van bestaande producten. Verder ben je bezig met nieuwbouw van websites, webapplicaties en mobiele applicaties die zowel intern als extern gebruikt worden. Je werkt hierbij nauw samen met andere developer, productmanagers en productspecialisten om zo mooie producten te creëren. Bedrijfsprofiel De organisatie waar je voor gaat werken is een snelgroeiende softwareleverancier en allround dienstverlener. Deze organisatie heeft zowel klanten die

Bekijk vacature »

Back-end PHP Software Developer - Juniorfunctie

Functieomschrijving Wij zijn op zoek naar een PHP Software Developer om ons team te versterken en mee te werken aan de ontwikkeling van eigen IOT-oplossingen. In deze functie ben je verantwoordelijk voor het bouwen van webapplicaties, apps en dashboards voor het uitlezen en managen van sensoren in machines. Je werkt nauw samen met een team van ontwikkelaars en engineers om de beste software-oplossingen te creëren. Jouw werkzaamheden zien er als volgt uit: Je bent in deze rol verantwoordelijk voor het ontwerpen, ontwikkelen en onderhouden van webapplicaties en softwaretoepassingen voor in-house ontwikkelde IOT oplossingen. Je werkt aan complexe databases en back-end

Bekijk vacature »

Frontend Developer Vue Nuxt HBO Javascript

Samengevat: Deze werkgever levert elke dag betere digitale gebruikerservaringen. Ben jij geschikt als frontend Developer? Heb je ervaring met Vue en Nuxt? Vaste baan: Front-End Developer HBO €3.100 - €4.600 Zij bieden opdrachtgevers een complete dienstverlening op gebied van ontwerpen en ontwikkelen van websites, zoekmachine optimalisatie, online adverteren, content marketing en conversie verbetering. Zij werken met een eigen ontwikkeld CMS. Bij bij hun werk je aan onze eigen bedrijfsapplicaties. Je ontwikkelt met ons de meest nieuwe software. Wij blinken uit als het gaat om de inzet van technologie. Deze werkgever staat open voor elke nieuwe trend. Onze systemen zijn groot

Bekijk vacature »

SQL ontwikkelaar

Functieomschrijving Voor een gave werkgever in regio Breda zijn wij per direct op zoek naar een SQL ontwikkelaar/ functioneel consultant. Hier wordt jij mede verantwoordelijk voor zowel de design en implementatie van SQL-databases als voor het verstaan van de processen van klanten naar het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt als volgt uit te zien: Je test de ontwikkelde oplossingen om er zeker van te zijn dat deze voldoen aan de functionele specificaties en de behoeften van de organisatie; Je ontwerpt, ontwikkelt en implementeert SQL-databases om de data behoeften van de organisatie te ondersteunen; Je stelt op

Bekijk vacature »

Database ontwikkelaar

Functieomschrijving Wil jij aan gave logistieke softwareprojecten werken en bij een uniek softwarebedrijf in de regio van Tilburg? Wacht niet langer en reageer snel op deze vacature. Als Database ontwikkelaar ga je aan de slag het schrijven van stored procedures en verder uitbouwen van de SQL database. Je werkt in een database team, met allemaal mensen die energie krijgen van software en techniek. Verder krijg je als taak: Optimaliseren en uitbouwen van de MS SQL databases die gebruikt worden; Optimaliseren van query's, waardoor er efficiënter gewerkt kan worden; Je werkt met de technieken T-SQL of PL/SQL; Bij interesse kan je

Bekijk vacature »

In-house .NET software developer

Functie omschrijving Ben jij op zoek naar een uitdagende in-house development functie? Maak jij graag hét verschil m.b.t. interne automatisering? Haal jij energie uit het automatiseren van processen voor je eigen collega's? Dan hebben wij de perfecte vacature voor je! Voor een gezellig Brabants familiebedrijf, zijn wij op zoek naar een .NET software developer. Je gaat in deze zelfstandige functie werken aan de ontwikkeling van eigen applicaties & en het koppelen van deze applicaties aan de ingekocht software. Jouw werkzaamheden zien er als volgt uit: Het management team signaleert behoeftes vanuit de business. Vervolgens worden deze behoeftes uitgewerkt en geprioriteerd.

Bekijk vacature »
Ozzie PHP

Ozzie PHP

05/05/2013 02:11:25
Quote Anchor link
Ola,

Kan iemand me uitleggen waartoe een mapper dient? Mijn gedachte (maar ik weet dus niet of dit 100% klopt) is dat een mapper een tussenlaag is tussen een class en een opslagmedium (meestal een database). In plaats van dat je in een class een "save" method hebt die rechtstreeks de database aanspreekt en een query uitvoert, spreek je de mapper aan. Klopt dit?

In een ander topic kwam toevallig dit stukje code voorbij:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$userMapper
= new UserMapper();
$user = $userMapper->getById(new User(12));
?>

Hier zie ik dus dat er een UserMapper wordt aangemaakt en dat er via die UserMapper een User object wordt teruggegeven.

Zou het niet handiger zijn om gewoon een nieuwe User aan te maken, en dat de User class intern een UserMapper gebruikt om de juiste databasegegevens te laden? Of kan dat niet?

En als je dan een User wil opslaan, moet je dat dan ook weer via die UserMapper doen?

Kortom, mijn vraag is eigenlijk hoe zo'n mapper werkt. Misschien kan iemand een heel simpel voorbeeldje geven van hoe je met een mapper een User moet laden en opslaan?
 
PHP hulp

PHP hulp

02/05/2024 22:12:13
 

05/05/2013 15:32:54
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
<?php

/**
 * Valideren van velden is weg gelaten!
 */

class User {

    private $id;
    private $username;

    /**
     * Alleen de id opslaan als dit ook een echte id is, want de mapper zal
     * dit aanroepen en dan zal de id niet correct opgeslagen worden.
     */

    public function __construct($id = 0) {
        (int)
$id != 0 ? $this->setId($id) : false;
    }


    public function setId($id) {
        $this->id = $id;
    }


    public function setUsername($username) {
        $this->username = $username;
    }


    public function getId() {
        return $this->id;
    }


    public function getUsername() {
        return $this->username;
    }

}


class UserMapper extends DataMapper {

    /**
     * @param object $user
     */

    public function getById(User $user) {
        $sth = $this->pdo->prepare('SELECT {velden} FROM users WHERE id = :id');
        $sth->execute(array(':id' => $user->getId());
        return $sth->fetchObject('User');
    }


    /**
     * @param object $user
     */

    public function save(User $user) {
        $sth = $this->pdo->prepare('UPDATE users SET username = :username WHERE id = :id');
        return $sth->execute(array(':id' => $user->getId(), ':username' => $user->getUsername()));
    }

}


/**
 * De user mapper openen.
 */

$userMapper = new UserMapper();

/**
 * De gebruiker met id 12 laden.
 */

print_r($userMapper->getById(new User(12));

/**
 * De gebruiker credentials toevoegen.
 */

$user = new User(12);
$user->setUsername('Aaron');

$userMapper->save($user);

?>

Het idee erond is dat een User object gebruikt wordt voor het vasthouden van de velden en de mapper dan weer de velden gaat afhandelen in de database.

Zo hebben de verschillende classes maar één taak.

Het is ook gemakkelijker als je de mappers moet updaten om de een of de andere reden.
Gewijzigd op 05/05/2013 15:36:05 door
 
Ozzie PHP

Ozzie PHP

05/05/2013 15:40:14
Quote Anchor link
Dankjewel voor je reactie Aaron.

Ik snap alleen nog niet helemaal hoe het werkt. Want als ik een user wil ophalen dan doe ik dit??

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$userMapper
= new UserMapper();
$user = $userMapper->getById(new User(12));
?>

Ik geef dan het User object mee aan de mapper? Correct? Alleen in jouw voorbeeld wordt de ID niet via de constructor geset. Of mis ik iets?

En wat gebeurt hier precies?

return $sth->fetchObject('User');

En hoe komt de data uit de database dan weer in die User class terecht?

Ik hoop dat je het nog een beetje kan toelichten!
 

05/05/2013 15:46:36
Quote Anchor link
Als je een gebruiker wilt ophalen moet je de mapper weer openen. Eventueel kun je een factory() functie maken... Om iets uit de database te halen geef je inderdaad een User object mee! Zo kan er niets van foute code tussen glippen als je alles uiteraard valideert.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

function getUsername() {
    return preg_replace('![^a-zA-Z]!', '', $this->username);
}


?>

Met fetch object laat je het resultaat dus fetchen in een object. Wat heel gemakkelijk is omdat je dan weeral niets fout kan doen (zie getUsername()). Als je meerdere resultaten hebt gebruik je dan fetchAll(PDO::FETCH_CLASS, 'User').

fetchObject en fetchAll hebben toegang tot de private values dacht ik. Dit wordt tevens afgehandeld door PDO. In andere gevallen zou je gewoon een array terug geven.

Construct is nu toegevoegd.
 
Ozzie PHP

Ozzie PHP

05/05/2013 15:57:23
Quote Anchor link
Pfff, lastig. Ik dacht eigenlijk dat fetchObject alleen een stdObject kon teruggeven.

Zou je als laatste nog kunnen uitleggen hoe dat fetchObject werkt. Als ik hier kijk http://php.net/manual/en/pdostatement.fetchobject.php dan lijkt het alsof je nog een array met argumenten moet toevoegen, die vervolgens in de constructor wordt geinjecteerd.

En waarom geef je in de mapper het User object mee, terwijl je via fetchObject weer een User obejct teruggeeft?

Sorry voor de vele vragen, maar het is me (zoals je merkt) nog niet helemaal duidelijk wat er nou precies gebeurt.
 

05/05/2013 16:12:54
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
<?php

/**
 * mixed PDOStatement::fetchObject ([ string $class_name = "stdClass" [, array $ctor_args ]] )
 */

$user = $sth->fetchObject('User');

/**
 * Dan zul je gewoon het volgende kunnen doen als er natuurlijk een
 * gebruiker is.
 *
 * De argumenten die je aan fetchObject kun meegeven heb ik nog nooit gebruikt. Maar
 * je moet er wel voor zorgen als je een constructor gebruikt dat je ervoor zorgt dat je
 * geen argument toelaat die niet valid zijn omdat anders fetchObject de constructor aanroept en
 * zo bijvoorbeeld id 'Aaron' wordt.
 */

echo $user->getUsername();

?>

Waarom ik aan de mapper een object mee geef.
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
<?php

/**
 * $_GET['id'] = 'Een String?';
 *
 * Laten we veronderstellen dat $_GET['id'] bestaat. Hier
 * zullen we $_GET['id'] dus nog moeten valideren. Daarom dat ik dus
 * user gebruik.
 */

$userMapper = new UserMapper();
$user = $userMapper->getById($_GET['id']);

/**
 * Laten we nu maar eens User gebruiken. Hier hoef je
 * niet te doen omdat $user->getId() ervoor zou moeten zorgen
 * dat je een id terug krijg of toch minstens een nummer (al dan niet correct).
 *
 * Ook naar de insert en save toe is het gewoon veel veiliger omdat alle input
 * dan gevalideerd is...
 *
 * De validatie is weg gelaten.
 */

$userMapper = new UserMapper();
$user = $userMapper->getById(new User($_GET['id']));

/**
 * In het eerste geval zal de query dan de volgende zijn.
 * SELECT {velden} FROM users WHERE id = 'Een String?'
 */

/**
 * In het tweede geval.
 * SELECT {velden} FROM users WHERE id = '0' of SELECT {velden} FROM users WHERE id = ''
 *
 * Die of is gewoon te zien hoe je de input valideert. Ik gebruik voor een int typecasting en dan
 * als het 0 is niets returnen.
 */


?>

En waarom ik een object terug geef is net dezelfde reden zoals hierboven. Dan wordt alle input nogmaals gecontroleerd, want neem nu aan dat er toch iets verkeerd in de database is opgeslagen... zal het nog altijd min of meer correct op het scherm komen (toch niet dat het gevaarlijk is voor de klant).
Gewijzigd op 05/05/2013 16:17:41 door
 
Ozzie PHP

Ozzie PHP

05/05/2013 16:25:36
Quote Anchor link
Ah, dus als ik het goed begrijp geef je een User object mee aan de Usermapper om te controleren of de ID wel een getal is. Maar dat betekent dus dat je eigenlijk voor niks een object aanmaakt.

Je zou ook gewoon een errormelding kunnen geven als $_GET['id'] geen getal is? Ik vind het vreemd dat je dan een User object meegeeft alleen om een getalletje te controleren.

Anyhow... dat fetchObject snap ik nog steeds niet. Jij doet dit:
$user = $sth->fetchObject('User');

Maar hoe komen de gegevens dan in het object terecht?
 

05/05/2013 16:32:37
Quote Anchor link
Ja. Dat zou je inderdaad kunnen doen en dat doe ik ook. Maar daarvoor maak ik een user object aan tijdens een POST request. Dan controleer ik of het een getal is (met eventuele errors) en dan heb ik toch al een user object... dus waarom niet gewoon aan de mapper doorgeven? In sommige gevalen selecteer je ook op meer dan één getal, dan kan het wel degelijk nuttig zijn.

Hoe de gegevens er terug komen weet ik niet want dit wordt door PDO geregeld (anders zou je ook nooit aan private values kunnen en dat kan hier wel). Alleen moeten de kolom namen gelijk zijn aan die in het object. Dus als je een kolom id hebt, moet je ook ergens $this->id hebben.

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
<?php

/**
 * In de veronderstelling dat alle POST en GET values bestaan!
 */

$user = new User($_GET['id']);
$userMapper = new UserMapper();

if($userMapper->getById($user) == false) {
    # Afhandelen
}

/**
 * Form submit.
 */

if($_SERVER['REQUEST_METHOD'] === 'POST') {

    $user->setUsername($_POST['username']);

    # Hier tussen nog alles valideren :-) Met een try catch block.

    $userMapper->save($user);

}


/**
 * Formulier tonen dat ook $user->get() gebruikt.
 */


?>

Zoals je kunt zien heb je dan toch al een object met alle veilige values!
Gewijzigd op 05/05/2013 16:34:07 door
 
Ozzie PHP

Ozzie PHP

05/05/2013 16:36:28
Quote Anchor link
Oké Aaron, thanks voor je uitleg!

Mochten er anderen zijn die ook gebruik maken van mappers, dan ben ik benieuwd naar hoe zij dat doen.

Alle reacties zijn van harte welkom!
 
Wouter J

Wouter J

05/05/2013 19:55:27
Quote Anchor link
Hmm... http://www.phphulp.nl/php/forum/topic/databse-in-een-class-hoe/82977/ (wat zou het toch makkelijk zijn als je al je eigen topics kan terugvinden...)
 
Tim S

Tim S

05/05/2013 20:14:12
Quote Anchor link
Ik heb het ook zonder mappers geprobeerd, maar vindt met mapper toch het prettigst werken.

Ik gebruik alleen geen fetchObject, wat ik wel eens doe is mappers in mappers gebruiken:

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
<?php

class menuMapper{

    public function fetchById($id){

        $smtp = $this->db->prepare('SELECT title, id FROM menus WHERE id=:id');
        $smtp->execute(array(
 
         ':id' => $id
 
        ));

         $result = $smtp->fetch(\PDO::FETCH_ASSOC);

        $menu = new \Menu;
         $menu->setId();
         $menu->setTitle();
 
         $itemMapper = new \menuItemMapper;
         $items = $itemMapper->fetchByMenuId($result['id']);
 
         $item = new \menuItem;
         foreach($items as $item){

             $item->setId();
              $item->setTitle();

              $menu->addItem(serialize($item));

         }
 

    }

}



$menuMapper = new menuMapper;
$menu = $menuMapper->fetchById(1);
print_r($menu->getItemsInArray());
?>
Gewijzigd op 05/05/2013 20:15:04 door Tim S
 
Ozzie PHP

Ozzie PHP

05/05/2013 21:15:43
Quote Anchor link
Thanks heren!

Wouter... dat zou inderdaad bijzonder makkelijk zijn. Hoe heb jij dat topic gevonden?
Op de een of andere manier kan ik regelmatig mijn topics niet meer terugvinden.
 
Wouter J

Wouter J

05/05/2013 21:19:41
Quote Anchor link
Ik zoek altijd via google en de volgende zoekopdracht: site:phphulp.nl %steekwoord% %username% Bij %username% vul ik dan altijd de naam in van de gene wie het geschreven heeft wat ik zoek. In dit geval was het: site:phphulp.nl datamapper usermapper pim wouter j
 
Ozzie PHP

Ozzie PHP

05/05/2013 21:46:03
Quote Anchor link
Ah oke... ik zoek me altijd rot en kan dan vaak niks meer terugvinden. En dan ga ik zelfs twijfelen of ik er uberhaupt al wel eens een vraag over heb gesteld. Jammer dat je via het forum zelf niet makkelijk iets kunt terugvinden.
 



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.