MVC begin

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Junior .NET developer

Functie Als junior .NET developer start jij in een development team met twee ervaren software ontwikkelaars. Jouw persoonlijke ontwikkeling is voor ons erg belangrijk en jij gaat dan ook meelopen met onze Senior .NET ontwikkelaar die jou met zijn kennis en ervaring een goede begeleiding kan aanbieden. Als team zijn jullie verantwoordelijk voor het schrijven van software voor onze toonaangevende Automatiseringssystemen. Jij gaat aan de slag met de onderhoud van de kernsoftware, ondersteund de software van derden door het gebruik van onze webservices en als team zijn jullie verantwoordelijk voor het ontwikkelen van onze backend oplossingen. Wij maken op dit

Bekijk vacature »

Software Programmeur PHP - JAVA

Functie Voor een opdrachtgever in omgeving Zoetermeer zijn wij op zoek naar een ontwikkelaar ter versterking van het huidige developers team. Heb jij altijd al willen werken voor een bedrijf, dat veilige netwerkverbindingen levert, door middel van veilige oplossingen, die door middel van de nieuwste technologieën ontwikkelt zijn? Stop dan nu met zoeken! Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten

Bekijk vacature »

Medior PHP Developer

Functie omschrijving We are looking for a dutch native speaker Wil jij als developer werken bij een interne organisatie en de eigen software verder helpen ontwikkelen? Lees dan snel verder! In deze functie ga je werken als PHP Developer en de interne software en applicaties verder ontwikkelen. In het kort houdt dit in: Je gaat de interne applicaties en software verder optimaliseren. Verder bouw je verschillende API's en koppelingen tussen systemen. Je gaat het CRM-systeem door middel van PHP verder ontwikkelen. Ook ga je collega's ondersteunen bij vragen over de software en applicaties. Bedrijfsprofiel Dit bedrijf is actief in het

Bekijk vacature »

.NET developer

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Medior Front-end Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Medior Front-end 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. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel

Bekijk vacature »

Fasttrack learning & development voor Java dev

Wat je gaat doen: Wij zoeken enthousiaste en ambitieuze junior en medior ontwikkelaars die toe zijn aan de volgende stap in hun carrière. Wij helpen je op je pad naar senior ontwikkelaar door ons fasttrack learning en development programma. Na een kort en intensief programma ga jij aan de slag bij klanten van DPA. Daarnaast krijg je veel ruimte om je te ontwikkelen als persoon en als specialist. De eerste maand gaan we aan de slag om je certificeringen te behalen waaronder OCP (Oracle Certified Professional). Daarnaast nemen we een deepdive in Spring Boot. Ook laten we je kennismaken met

Bekijk vacature »

Robot Programmeur

Een verantwoordelijke baan met leuke uitdagingen. Heb jij ervaring met het programmeren van robots? Kan jij goed samenwerken met collega's die verschillende specialisaties hebben? Ben je oplossingsgericht, analytisch en flexibel? Ga dan aan de slag als Robot Programmeur bij Gibas in Nijkerk! Als Robot Programmeur kom je te werken bij Gibas. Dat betekent dat je gegarandeerd meewerkt aan unieke oplossingen in productieprocessen. Bij elk project moet er opnieuw geëngineerd en geprogrammeerd worden. Dat maakt jouw werk uitdagend! Voordat je robots gaat programmeren komt er het volgende bij kijken: De opdracht gaat van de afdeling Sales naar de afdeling Operations door

Bekijk vacature »

Software Developer PHP JavaScript Python HBO SQL

Samengevat: Wij zijn een softwarebedrijf voor Autodealers. Ben jij een Medior of Senior Software Developer? Heb je ervaring met PHP, JavaScript of Python? Vaste baan: Java.Developer Software HBO €3.000 - €5.200 Bij ons op de werkvloer is er een positieve en informele sfeer. Naast een goede begeleiding en een enthousiaste klantenkring biedt deze werkgever een prettige omgeving met zeer afwisselende werkzaamheden. Houd jij van aanpakken en denk je dat je deze uitdaging aankunt? Dan zoeken wij jou! Zij werken voor grote klanten. Zij doen omvangrijke projecten die we bij deze werkgever op kantoor realiseren (geen detachering). Zij werken met state-of-the-art

Bekijk vacature »

.NET Developer

Dit ga je doen (Door)Ontwikkelen van het applicatielandschap; (Door)Ontwikkelen van microservices; Bouwen van nieuwe functionaliteiten; Verbeteringen aandragen voor het applicatielandschap; Sparren met de business. Hier ga je werken De organisatie is werkzaam in de financiële dienstverlening met meer dan 200 medewerkers en meer dan 250.000 eindgebruikers is het een van de grotere binnen haar branche. Je komt te werken in een team waarmee je verantwoordelijk bent voor het ontwikkelen en onderhouden van de financiële applicaties binnen de organisatie, denk hierbij aan het bouwen en onderhouden van portalen. Als .net developer ga jij het development team ondersteunen met de transitie naar

Bekijk vacature »

PHP Developer

Functieomschrijving Vanuit het hoofdkantoor in omgeving Breda ben je als PHP/Symfony Developer niet alleen gefocust op het ontwikkelen van software. Daarnaast ben je voortdurend bezig met het zoeken naar nieuwe trends en ontwikkelingen die van waarde kunnen zijn voor de efficiëntie van software ontwikkeling. Hieronder een kort overzicht van jouw takenpakket: Het ontwerpen en implementeren van webapplicaties met het Symfony Framework; Het schrijven van een schone en efficiënte codes; Het testen van ontwikkelde applicaties om te zorgen dat ze goed functioneren en voldoen aan de eisen van de klant; Onderhouden en updaten van bestaande applicaties die zijn gebouwd met het

Bekijk vacature »

Magento developer

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als back-end developer fungeer je als het verlengstuk van hun klanten. Technisch complexe zaken pak je met liefde op, en hierin werk je samen met o.a. front-end developers en designers. Klanten verwacht hierin kwaliteit van het hoogste niveau en een proactieve, meedenkende rol bij het maken van zowel technische als strategische keuzes. Ga

Bekijk vacature »

Java Ontwikkelaar

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Software Programmeur PHP

Functie Ben jij op zoek naar een nieuwe uitdaging als PHP developer en zoek je een leuke platte organisatie? Lees dan snel verder! Voor een opdrachtgever in omgeving Capelle aan den IJssel dat zich gespecialiseerd heeft in het realiseren van veilige netwerkverbindingen zijn wij op zoek naar een leuke software developer ter versterking van het huidige team. Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen PHP, JAVA en Node.js. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn

Bekijk vacature »

Front-end developer (Angular)

Functie Het team bestaat uit een architect, fullstack developers, app developers, de product owner en projectmanager. Eenieder draagt vanuit zijn discipline bij aan een complete oplossing voor de klant. Uiteraard zul je hierin nauw samenwerken met je collega’s. Jij wordt verantwoordelijk voor de front-end implementatie en fungeert als lead op dit gebied binnen het team. Je kunt helder formuleren, ideeën uitdragen en overbrengen aan je collega’s. Qua technische stack is het vooral van belang dat je ervaren bent met Angular, HTML5, CSS en TypeScript. Verder is ervaring in NgRx, Bootstrap, BEM en Cypress een pré, evenals affiniteit met UX/UI Design!

Bekijk vacature »

Leidinggevend Full Stack Developer

Hé jij, nieuwe Pinkcuber! Ga aan de slag bij Pinkcube, online leverancier van promotieartikelen! Een innovatieve organisatie waar extra stappen zetten voor klanten de normaalste zaak van de wereld is. Ambitieus zijn we ook. ‘Naoberschap’ staat bij Pinkcube hoog in het vaandel; we helpen elkaar en iedereen is welkom. Pinkcube is Great Place to Work Certified, erkend leerbedrijf, maatschappelijk betrokken partner van stichting Present en partner van CliniClowns. En misschien wel jouw nieuwe werkgever. Wij zoeken namelijk een enthousiaste: Leidinggevend Full Stack Developer (40 uur, medior/senior) Ben jij klaar om baanbrekende ideeën tot leven te brengen en deel uit te

Bekijk vacature »

Pagina: « vorige 1 2 3 volgende »

Roy B

Roy B

27/05/2014 18:35:03
Quote Anchor link
Roy B op 27/05/2014 16:21:22:
Oke duidelijk!
De DataMapper is dus een laag tussen de Controller en het Model?

Dan mijn volgende vraag:
Ik wil een database gaan koppelen, maar is dit een beetje de juiste manier?

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
<?php
// newsitem.model.php
class NewsitemModel
{
  private $_database;

  public function __construct($database)
  {

    $this->_database = $database;
  }
}


// config.php
$host = "localhost";
$database = "";
$username = "";
$password = "";

$pdo = new PDO("mysql: host='.$localhost.'; dbname='.$database.'", "'.$username.'", "'.$password.'");

// news.php
include "config.php";

$model = new NewsitemModel($pdo);

$controller = new NewsitemController($model);
$controller->getAll();
?>
 
PHP hulp

PHP hulp

19/02/2025 00:09:49
 
Frank Nietbelangrijk

Frank Nietbelangrijk

27/05/2014 21:39:40
Quote Anchor link
Roy heb je al ervaring met het extenden van een class?
Je zou gewoon een BaseModel class kunnen maken die voorziet in de database connectie. Daarna extend je ieder Model van de BaseModel.

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
<?php
// base.model.php
class BaseModel
{
  private $db; // lekker kort :p

  public function __construct($database)
  {

    $this->db= $database;
  }
}


// newsitem.model.php
class NewsitemModel extends baseModel
{
  public function indexAction()
  {

    $newsitems = $this->db->getAll('newsitems');
    //...
  }
}


// blog.model.php
class BlogModel extends baseModel
{
  public function indexAction()
  {

    $blogs = $this->db->getAll('blogs');
    //...
  }
}


?>


Roy B op 27/05/2014 15:29:34:
@Frank Nietbelangrijk,
Kun je een voorbeeldje geven van hoe de methode load_view eruit ziet?
Waar wordt de locatie van de view meegegeven?


Dit is een héél erg eenvoudige loader. In werkelijkheid zijn er nog wel wat zaken om rekening mee te houden.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class BaseController
{
    protected function loadView($name, $data);
    {

        extract($data);
        unset($data);

        include BASEDIR . '/views/' . $name . '.php';
    }
}

?>
Gewijzigd op 27/05/2014 21:51:30 door Frank Nietbelangrijk
 
Roy B

Roy B

28/05/2014 09:02:57
Quote Anchor link
Frank Nietbelangrijk op 27/05/2014 21:39:40:
Roy heb je al ervaring met het extenden van een class?
Je zou gewoon een BaseModel class kunnen maken die voorziet in de database connectie. Daarna extend je ieder Model van de BaseModel.


Nee, maar ik begin het wel te begrijpen.
Ik maak dus de verbinding met de database in mijn BaseModel? Moet ik deze dan ook iedere keer dat ik een Model gebruik de BaseModel aanroepen om een database verbinding te creëren?
Gewijzigd op 28/05/2014 09:23:51 door Roy B
 
Erwin H

Erwin H

28/05/2014 09:14:35
Quote Anchor link
Roy B op 27/05/2014 16:21:22:
Dan mijn volgende vraag:
Ik wil een database gaan koppelen, maar is dit een beetje de juiste manier?

Nee dat is het niet. Door je gegevens van de connectie hardcoded in een php bestand te zetten mis je alle flexibiliteit. Als je morgen dezelfde code wilt gaan gebruiken op een andere site (of zelfs maar test en productie omgevingen wilt hebben), dan heb je al een probleem. Configuratie gegevens horen in een configuratie bestand (ini, xml, yaml) en niet in een php script bestand.
Maak van de connectie ook een class en zorg dat je zelfs die class nog eens zou kunnen vervangen. Bijvoorbeeld als je niet van een mysql database, maar van een db2 database gebruik gaat maken, om maar iets te noemen.
Gewijzigd op 28/05/2014 09:18:03 door Erwin H
 
Roy B

Roy B

03/06/2014 15:11:03
Quote Anchor link
Roy B op 28/05/2014 09:02:57:
Frank Nietbelangrijk op 27/05/2014 21:39:40:
Roy heb je al ervaring met het extenden van een class?
Je zou gewoon een BaseModel class kunnen maken die voorziet in de database connectie. Daarna extend je ieder Model van de BaseModel.


Nee, maar ik begin het wel te begrijpen.
Ik maak dus de verbinding met de database in mijn BaseModel? Moet ik deze dan ook iedere keer dat ik een Model gebruik de BaseModel aanroepen om een database verbinding te creëren of roep ik deze eenmalig ergens aan?

Iemand nog tips?
Gewijzigd op 03/06/2014 15:12:42 door Roy B
 
Ward van der Put
Moderator

Ward van der Put

03/06/2014 15:13:21
Quote Anchor link
>> Iemand nog tips?

Laat eens zien hoe ver je ondertussen bent?
 
Roy B

Roy B

03/06/2014 15:24:06
Quote Anchor link
Hier een klein gedeelte...

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
<?php
// config.php
$host = "localhost";
$database = "";
$username = "";
$password = "";

$pdo = new PDO("mysql:host=".$hostname."; dbname=".$database."", $username, $password);

// newsitem.controller.php
class NewsitemController
{
  private $_model;

  public function __construct($model)
  {

    $this->_model = $model;
  }


  public function getAll()
  {

    return $this->_model->getAll();
  }
}


// model.php
class BaseModel
{
  private $_database;

  public function __construct($database)
  {

    $this->_database = $database;
  }
}


// newsitem.model.php
class NewsitemModel extends BaseModel
{
  public function getAll()
  {

    $select = "SELECT * FROM newsitems";
    $query = $this->_database->query($select);
        
    if($query->rowCount() > 0)
    {

      return $query->fetchAll();
    }
  }
}


// news.php
include "config.php";

$model = new NewsitemModel($pdo);

$controller = new NewsitemController($model);
$newsitems = $controller->getAll();

foreach($newsitems AS $newsitem)
{

  echo "<h2>".$newsitem["title"]."</h2>";
}

?>
Gewijzigd op 03/06/2014 15:55:48 door Roy B
 
Ward van der Put
Moderator

Ward van der Put

03/06/2014 15:58:32
Quote Anchor link
Helemaal geen slecht begin, hoor!

Je kunt verschillende dingen anders/beter doen, maar heb je zelf ergens specifieke vragen of twijfels over?
 
Roy B

Roy B

03/06/2014 16:11:34
Quote Anchor link
Ward van der Put op 03/06/2014 15:58:32:
Helemaal geen slecht begin, hoor!

Je kunt verschillende dingen anders/beter doen, maar heb je zelf ergens specifieke vragen of twijfels over?

Thanks! :)
Sowieso zijn tips voor verbeteringen altijd welkom, dus als je tips hebt, graag!
Ik heb nog wel een vraag over het volgende..

Stel ik wil een newsitem ophalen a.d.v. de titel in de URL.
Bijvoorbeeld: ../nieuws/Eerste-nieuwsitem

Wat ik dan terug krijg is $newsitem["title"] etc.
In mijn view gebruik ik liever $titel i.p.v. $newsitem["title"]. Kan dat?
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
<?php
// newsitem.php
include "../includes/config.php";

$model = new NewsitemModel($pdo);
$controller = new NewsitemController($model);

if(isset($_GET["title"]) AND trim($_GET["title"]) != "")
{

  // Select Newsitem by title
  $newsitem = $controller->getByTitle($_GET["title"]);
}


// newsitem.controller.php
class NewsitemController
{
  private $_model;

  public function __construct($model)
  {

    $this->_model = $model;
  }


  public function getByTitle($title)
  {

    $title = str_replace("-", " ", $title);

    return $this->_model->getByTitle($title);
  }
}


// newsitem.model.php
class NewsitemModel extends BaseModel
{
  public function getByTitle($title)
  {

    $title = str_replace("-", " ", $title);

    $select = "SELECT * FROM newsitems WHERE title = :title";
    $prepare = $this->_database->prepare($select);
        
    $prepare->bindParam(":title", $title, PDO::PARAM_STR);
    $prepare->execute();
        
    if($prepare->rowCount() > 0)
    {

      return $prepare->fetch();
    }
  }
}

?>
Gewijzigd op 03/06/2014 16:32:05 door Roy B
 
Jan terhuijzen

jan terhuijzen

03/06/2014 16:32:22
Quote Anchor link
Daar was die extract functie voor. http://nl3.php.net/extract
Gewijzigd op 03/06/2014 16:32:41 door jan terhuijzen
 
Ward van der Put
Moderator

Ward van der Put

03/06/2014 19:46:16
Quote Anchor link
Even dan één ding in stappen:

1. Je hebt nu een config.php die een PDO-object $pdo definieert.

2. Die $pdo injecteer je in een BaseModel en alle Model-klassen die dit BaseModel extenden.

3. Tot slot gebruik je bijvoorbeeld binnen een class NewsitemModel extends BaseModel code die alleen werkt bij PDO.

Die basisopzet schaalt niet lekker:

• Je opent per request altijd een databaseverbinding, zelfs als je die helemaal niet nodig hebt. Daarmee verbrand je bij een populaire site resources die je hard nodig hebt.

• Je kunt PDO niet soepel vervangen door iets anders, omdat je daarvoor meerdere klassen moet aanpassen.

• Je kunt de databaseverbinding (ongeacht of dat PDO of iets anders is) niet gemakkelijk vervangen, waardoor de applicatie zich bijvoorbeeld niet laat cachen. Je applicaties leunen nu altijd op de database terwijl dat misschien helemaal niet hoeft.

• Je zeult nu één PDO-object $pdo achter je aan door de hele applicatie. Dat kan zowel een voordeel als een nadeel zijn. Je weet het verschil echter pas als je het overdenkt of test.

Dit is, kortom, het eerste onderdeel dat ik nog eens zou overdenken.
 
Roy B

Roy B

03/06/2014 19:57:46
Quote Anchor link
@Ward van der Put,
Klopt! De connectie met de database is een uitdaging voor later.
Hiervoor wil ik een klasse maken, maar voor nu is dat nog even niet nodig.

Heb je misschien nog tips over de vraag die ik stelde?
Ik wil mijn templates compleet afhankelijk maken van de Controller met enkel variabelen daarin. Dat is nu nog niet. Ik denk dat ik dan moet gaan werken met een Router.

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
<?
// newsitems.php
includes "../includes/config.php";

$model = new Model($pdo);
$controller = new Controller($model);

if(isset($_GET["title"]) AND trim($_GET["title"]) != "")
{

  $newsitems = $controller->getByTitle($_GET["title"]);
}

?>


<!DOCTYPE html>
<head>
<title><?php echo $newsitem["title"]; ?></title>
...
Gewijzigd op 03/06/2014 20:05:17 door Roy B
 
Ward van der Put
Moderator

Ward van der Put

03/06/2014 20:09:29
Quote Anchor link
Als je veel queries van het type SELECT * FROM x of SELECT * FROM x WHERE y = z gebruikt, dan zou ik serieus een Data Access Object (DAO) pattern overwegen.

Dat lost in je huidige opzet meteen twee problemen op: de $pdo die je achter je aansleept en controllers die via/via aan het model hangen.
 
Roy B

Roy B

03/06/2014 20:18:37
Quote Anchor link
Ward van der Put op 03/06/2014 20:09:29:
Dat lost in je huidige opzet meteen twee problemen op: de $pdo die je achter je aansleept en controllers die via/via aan het model hangen.

Hoe bedoel je via/via?
 
Ward van der Put
Moderator

Ward van der Put

04/06/2014 09:25:37
Quote Anchor link
Roy B op 03/06/2014 20:18:37:
Hoe bedoel je via/via?

Je hebt een te lange aaneenschakeling van onderling afhankelijke objecten. Moeilijk te verwoorden, maar je hebt te veel objecten "in" elkaar zitten; die zou je ze meer "naast" elkaar moeten zetten.

Je opent al in config.php met PDO een databaseverbinding $pdo. Die injecteer je vervolgens in het model NewsitemModel($pdo). Dat model injecteer je tot slot in de controller NewsitemController($model), waarmee je eigenlijk dus NewsitemController(NewsitemModel($pdo)) doet.

Die $pdo hoort daar niet in thuis. Alleen het model weet waar Abraham de mosterd haalt. De NewsitemController is nu nog geen controller, maar meer een "wrapper", een extra en overbodige schil rondom het model:

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 NewsitemController
{
  private $_model;

  public function __construct($model)
  {

    $this->_model = $model;
  }


  public function getByTitle($title)
  {

    $title = str_replace("-", " ", $title);

    return $this->_model->getByTitle($title);
  }
}

?>


Al in de constructor maak je zo van de controller een container van het $model. Vervolgens is de methode getByTitle() van de controller slechts een herhaling van getByTitle() van het model. Kortom: deze controller is een kopie van het model.
 
Roy B

Roy B

04/06/2014 10:01:23
Quote Anchor link
@Ward van der Put,
Heb je tips/voorbeelden voor verbeteringen?
Een database klasse is een begin? En verder?
 
Ward van der Put
Moderator

Ward van der Put

04/06/2014 10:59:22
Quote Anchor link
Begin inderdaad bij de basis, bijvoorbeeld met een Data Access Object (DAO) pattern. In de configuratie declareren we alleen globale constanten en we gebruiken één basisklasse voor alle databaseconnectiviteit. 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
<?php
/* Configuratie in bijvoorbeeld config.php */
define('DB_HOST',     'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME',     'test');

/* Abstract Data Access Object (DAO) */
abstract class AbstractBaseDAO
{
    private $Connection;

    public function __construct()
    {

        $this->connect();
    }


    private function connect()
    {

        $this->Connection = new \MySQLi(DB_HOST, DB_USERNAME, DB_PASSWORD);
        $this->Connection->select_db(DB_NAME);
    }


    /**
     * @param void
     * @return array|null
     */

    public function fetchAll()
    {

        $query = 'SELECT * FROM ' . $this->TableName;
        if ($result = $this->Connection->query($query)) {
            if ($result->num_rows == 0) {
                return null;
            }
else {
                while ($row = $result->fetch_assoc()) {
                    $rows[] = $row;
                }

                return $rows;
            }
        }
else {
            return null;
        }
    }
}

?>


Nu zeul je geen $pdo met geopende databaseverbinding achter je aan in alle modelklassen. Wil je de database-opzet veranderen, dan hoef je slechts op één plaats de code te herschrijven, hier in de methode connect().

Zoals gezegd, weet alleen het model waar Abraham de mosterd haalt. En die models kunnen we nu ook sterk vereenvoudigen, want daaruit verdwijnt alle PDO-specifieke PHP-code. Je kunt met deze eerste opzet bijvoorbeeld al alle nieuwsberichten ophalen via fetchAll(). Het enige model dat je daarvoor nodig hebt, is:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
/* Model */
class NewsitemModel extends AbstractBaseDAO
{
    protected $TableName = 'newsitems';
}

?>


That's it. De abstract class AbstractBaseDAO is er voor de database en de class NewsitemModel extends AbstractBaseDAO voor een specifieke databasetabel.

Er zijn meer design patterns; dit is slechts een voorbeeld. Je kunt het op verschillende manieren aanpakken, bijvoorbeeld ook met een data mapper pattern of met een active record pattern.
 
Roy B

Roy B

04/06/2014 11:49:27
Quote Anchor link
Oke duidelijk!
Ik ga hier mee aan de slag :)

Dan nog even heel iets anders tussendoor..
Alle URL's worden doorgestuurd naar mijn index.php d.m.v. htaccess.
In mijn index.php haal ik de URL op met $_SERVER["REQUEST_URI"].

Stel dat mijn URL /nieuws/dit-is-een-nieuwsitem is. Dan moet de NewsitemController worden aangeroepen en vervolgens de actie $controller->getByTitle($title) worden uitgevoerd. Maar is mijn URL /nieuws moet de actie $controller->getAll() worden uitgevoerd.

Heb je hier nog tips voor?
Gewijzigd op 04/06/2014 11:51:30 door Roy B
 
Ward van der Put
Moderator

Ward van der Put

04/06/2014 12:14:33
Quote Anchor link
Als je uitsluitend nieuws wilt tonen, dan kun je direct de controller inzetten en daarmee op basis van de URL de methode getAll() of getByTitle() aanroepen.

Maar waarschijnlijk handelt index.php in de root als de "front controller" meer af dan alleen /nieuws/ en dan kun je het beste een apart object voor MVC-routing gebruiken dat beslist welke controllers worden aangesproken.

In plaats van $_SERVER['REQUEST_URI'] zou ik zelf een aparte variabele gebruiken, bijvoorbeeld $_GET['route'] met:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]
 
Roy B

Roy B

04/06/2014 12:33:10
Quote Anchor link
@Ward van der Put,
Mijn index.php handelt inderdaad meer af dan alleen /nieuws. Alle URL's worden hier afgehandeld, zoals dat hoort bij een MVC heb ik gelezen. Ik heb ook iets gelezen over een Router. Kun je mij op weg helpen hiermee?
Gewijzigd op 04/06/2014 12:33:24 door Roy B
 

Pagina: « vorige 1 2 3 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.