[oop] mapper

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Front-End Developer

Als Front-End Developer bij Coolblue verbeter je de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Wat doe je als Front-End Developer bij Coolblue? Als Front-end Developer werk je aan de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Je vindt het leuk om samen te werken met de UX designer om stories op te pakken. Je krijgt energie van het bedenken van creatieve oplossingen en presenteert dit graag binnen het team. Daarnaast ben je trots op je werk en verwelkomt alle feedback. Ook Front-end Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te

Bekijk vacature »

Ervaren PHP ontwikkelaar

Functie Jij als PHP ontwikkelaar komt te werken in een team van 4 andere PHP ontwikkelaars. Je zult je voornamelijk bezig houden met: – Het ontwikkelen van nieuwe features – Doorontwikkelen van de API – Nadenken over de technische infrastructuur – Datakwaliteit Samen met het team ben jij verantwoordelijk voor de verdere ontwikkeling van de software en om de positie als marktleider in Europa te behouden. Ze werken volgens SCRUM in 2 wekelijkse sprints, werken met Jira voor alle tickets en communiceren veel via Slack. Eisen • Minimaal 3 jaar ervaring als back end developer • Je hebt affiniteit met

Bekijk vacature »

Senior Airport Developer ( System engineer)

De functie Nice to know (you) De nieuwe A-pier wordt de duurzaamste van Schiphol. Als deze af is ligt er 4000 vierkante meter zonnepanelen op het dak. En de toiletten? Die spoelen door met regenwater. we gaan ervoor: het creëren van de meest duurzame en hoogwaardige luchthavens ter wereld. een toekomstbestendig en duurzaam Schiphol. Daar werken we elke dag hard aan in team Development & Sustainability. Jij bent regisseur, expert én aanjager van de ontwikkeling van Schiphol. Connecting your world Hoe maak je de ambities en doelstellingen van Schiphol concreet in een project? De waarde voor Schiphol naar eisen die

Bekijk vacature »

Medior PHP developer

Functie Samen met je development team werk je Agile Scrum en met jullie gezamenlijke kennis en ervaring bepalen jullie samen de beste keuze voor techniek en architectuur. Naast het ontwikkelen van software ben je continue bezig om ook jezelf te ontwikkelen. Ze werken met o.a.: PHP, Laravel, Doctrine, PHP Unit, Behat, React, TypeScript, (My)SQL, Postgress, Redis, ElasticSearch, Docker, Nginx, GIT flow, JIRA, AWS. Eisen • HBO werk- en denkniveau • Je hebt goede kennis en ervaring met PHP • Je bent niet bang voor complexe projecten • Je werkt graag zelfstandig aan applicaties • Je bent altijd nieuwsgierig naar nieuwe

Bekijk vacature »

C# .NET Ontwikkelaar ASP.NET

Samengevat: Deze werkgever is een inkooporganisatie. Ben jij een ervaren .Net ontwikkelaar? Heb je ervaring met .Net en C#? Vaste baan: C# .NET Developer .Net MBO HBO €3.100 - €4.300 Onze missie is: “Een essentiële bijdrage leveren aan het verlagen van de integrale kostprijs van de aangesloten groothandels, middels het bundelen van inkoopvolume en het creëren van synergie met en tussen de groothandels en leveranciers, met scherpe inkoopprijzen, goede handelscondities en gerichte dienstverlening als resultaat” Zij werken voor MKB klanten. Deze werkgever heeft veel verschillende projecten. Houd jij van afwisseling? Dan zit je bij hun goed! De branche van dit

Bekijk vacature »

Low Code Ontwikkelaar

In het kort Als Low Code Developer werk je aan projecten bij en voor onze klanten, waarbij je voor het ontwikkelen van de oplossingen een technisch low-code platform gebruikt. Samen met het team streef je naar de beste oplossing en bepalen jullie de juiste aanpak. Je rol is divers en je bent van begin tot eind betrokken bij de ontwikkeling zowel de back-end en de front-end van de applicatie. Naast de ontwikkeling en oplevering, breng je ook advies uit aan de klant waarom bepaalde keuzes worden gemaakt. Je bent dan ook communicatief sterk en kunt je keuzes goed (inhoudelijk) onderbouwen.

Bekijk vacature »

Full stack developer

Functie Binnen een ontzettend stimulerende werkomgeving kom jij te werken in een software team van 14 developers. Met ontzettend stimulerend bedoel ik een modern pand, wat voorzien is van alle nodige soft- en hardware, zodat jij jouw werk goed kan uitvoeren. Daarnaast zitten ze in een bos, waardoor je in een groene omgeving rustig kunt werken. Het team bestaat uit front end, back end en full stack developers. Jij krijgt dus de keuze hier waar jij jezelf het liefst op zou richten, maar de voorkeur gaat uit naar back end. Er wordt hier Scrum (agile) gewerkt in multidisciplinaire teams met

Bekijk vacature »

Back-end Developer (Permanent position with the em

Bedrijfsomschrijving Dutch specialist in technical installation materials. Functieomschrijving Purpose of the position: Our client is looking for a Back-end Developer who, together with the rest of the energetic and dynamic team, is responsible for the development and management of the website. This not only concerns the development and management of the current website, but also the development of a new Headless Commerce Platform to keep the customer's website Future proof. Within the IT department, there is a real DevOps culture and the commerce team is at the forefront and tries to implement continuous improvements. Most important tasks: ï‚· Designing and

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

.NET developer

Functie Als .NET ontwikkelaar start jij in een multidisciplinair team met 7 ontwikkelaars. Dit team is verdeeld onder Front-end ontwikkelaars en backend developers. De backend developers werken voornamelijk aan desktop applicaties in combinatie met backend systemen. Hier ga jij dus ook mee aan de slag! Hierbij wordt voornamelijk gebruik gemaakt van C# .NET, WPF, UWP, XAML en MVVM. WPF, UWP, .NET Core, Azure Devops en Entity Framework. WPF en UWP worden dan ook voornamelijk gebruikt voor de user interface van de desktop applicatie. Het development team is dan ook erg gedreven m.b.t. het ontwikkelen van vooruitstrevende en innovatieve horeca automatiseringsoplossingen.

Bekijk vacature »

Cobol Developer

Dit ga je doen Als Cobol Ontwikkelaar zal je gaan meebouwen aan een onderdeel van het backend systeem waarbij je het functionele ontwerp vertaald naar een technische oplossing die geïntegreerd kan worden in de huidige omgeving. Je zorgt ervoor dat de bedrijfsprocessen op een efficiënte manier worden uitgevoerd en werkt proactief aan het verbeteren hiervan. Samen met jouw collega’s reviewen jullie elkaars code en test je je eigen code. Je werkt nauw samen met andere ontwikkelaars, testers en functioneel ontwerpers. Taken pakket: Beheren en doorontwikkelen van de bestaande omgeving; Vertalen van een functionele vragen naar een technische oplossing; Doorvoeren van

Bekijk vacature »

Software Ontwikkelaar

Functieomschrijving In deze uitdagende functie als Software Developer ga je de volgende taken uitvoeren: Maatwerk back-end software programmeren; API koppelingen bouwen; Software optimaliseren voor klanten; Bouwen maatwerk applicaties; Werken met Microsoft stack zoals C#, .NET (Core) en Entity framework; Bedrijfsprofiel Je gaat werken bij een klein softwareontwikkelingsbureau, die maatwerk software bouwt voor klanten door heel Nederland. Dit doen zij al meer dan 20 jaar. Het is van oorsprong een familiebedrijf, opgezet door de eigenaar, die er nog steeds werkt. Het team bestaat vooral uit back-end developers en één systeembeheerder. Je krijgt veel kans om jezelf te ontwikkelen en krijgt tevens

Bekijk vacature »

Junior .NET Developer

Dit ga je doen Als junior .NET Developer lever je met jouw oplossingen direct een bijdrage aan de bedrijfsprocessen van de klanten. Werkzaamheden waar jij je zoal mee bezig houdt zijn; Het ontwikkelen, onderhouden en optimaliseren van de draaiende platforms van de klanten; Softwareontwikkeling middels C#, .NET; Klantcontact om de wensen te bespreken en uit te werken; Optimaliseren van de (huidige) bedrijfsprocessen; De IT-afdeling bestaat uit 30 personen verdeeld over 3 teams. Het team waar je in terecht komt bestaat uit ongeveer tien man. Het is een team wat bestaat uit betrokken collega’s, waar iedereen bereidt is om elkaar te

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 »

.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 »
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

29/04/2024 17:43:40
 

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.