MVC begin

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Java Front-end Developer

Dit ga je doen Ontwikkelen van nieuwe functionaliteiten in Java met tools als Springboot, MS SQL Server (T-SQL) en JavaScript; Het onderhouden van de (web-)applicaties binnen een complexe omgeving; Werken aan de migratie van een monolithisch systeem naar een architectuur gebaseerd op Kubernetes; Code reviews met collega's en actieve kennisuitdelingsessies voeren; Het uitvoeren van unit- en systeemtests Experimenteren met nieuwe tools en technieken. Hier ga je werken Binnen deze organisatie kom je te werken op de afdeling die gegevens verzamelt vanuit het hele land. Denk hierbij aan vertrouwelijke persoonsgegevens. Het team verwerkt al deze data met als doel het waarborgen

Bekijk vacature »

Junior .NET developer

Functie Wij zijn bezig met het ontwikkelen van een nieuw product en wij hebben jouw hulp hierbij nodig! Als junior .NET ontwikkelaar krijg jij de kans om samen met ons deze nieuwe uitdaging aan te gaan! Momenteel bestaat ons team uit drie interim Software Engineers. Twee hiervan zijn zeer ervaren .NET specialisten die inmiddels hun strepen in dit vakgebied al hebben behaald. Ook hebben wij een junior als onderdeel van ons team die zich op dit moment nog bezig houdt met de Front-end (Angular/TypeScript), maar zich nu ook meer gaat verdiepen in de backend. Wij willen ons team graag verder

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 »

PHP Back-end Developer

Vacature details Vakgebied: Software/IT Opleiding: Starter Werklocatie: Nijmegen Vacature ID: 13633 Introductie OUr client develop websites, webshops, and digital environments that are used by many visitors daily. They are seeking an experienced PHP-Developer Back-end to join the team. If you're looking for a position where you can tackle challenging, innovative, and multidisciplinary ICT projects and make a difference, this vacancy might be for you! Functieomschrijving As a PHP developer, you'll develop websites and digital environments used by many visitors daily. You'll work as a back-end developer and want to continuously develop in this field. You can work independently and efficiently,

Bekijk vacature »

Developer

Functie omschrijving Gaat jouw hart sneller kloppen van software developen in C#.NET? Voor een softwarebedrijf in regio Den Bosch zijn wij op zoek naar een C# programmeur. Lees snel verder! Wat ga je doen? Je gaat werken met C# en ASP.NET MVC Framework om onder meer webapplicaties, webshops en websites te ontwikkelen. Je optimaliseert de bestaande software en helpt mee aan het automatiseren van bedrijfsprocessen. Je gaat samen met je collega's de juiste oplossing op basis van de wensen van de klanten uitwerken tot een mooi product. Bedrijfsprofiel Het ontwikkelen van softwareoplossingen en kantoorautomatiseringen is waar dit bedrijf voor staat.

Bekijk vacature »

Frontend Developer - Leeuwarden

Frontend Developer – Leeuwarden Als Frontend Developer bouw jij mee aan het onderwijs van de toekomst! In een scrum team werken met jonge en enthousiaste collega’s, moderne technieken, ruimte voor eigen ontwikkeling en op een proactieve wijze kunnen meewerken aan innovatie binnen het onderwijs. Magister is het state-of-the-art softwarepakket dat scholen in het voortgezet onderwijs op alle fronten ontzorgt. Van leerlingenadministratie tot het ondersteunen van individuele leerlijnen, van toegang tot digitaal lesmateriaal tot het plannen van het lesrooster. In de Magister app bedient Magister ruim 2,5 miljoen gebruikers waarvan, dagelijks meer dan 600.000 unieke. Hiermee is Magister de absolute marktleider

Bekijk vacature »

Medior/senior Front-end developer

Functie Onder begeleiding van 3 accountmanagers waarvan er 1 binnen jouw expertise je aanspreekpunt zal zijn ga je aan de slag bij diverse opdrachtgevers. Hij of zij helpt je bij het vinden van een passende en uitdagende opdracht. Hierin houden ze uiteraard rekening met jouw situatie, ervaring en (technische) ambities. De opdrachten duren gemiddeld één tot 2 jaar. Hierdoor kun je je ook echt vastbijten in een project en als consultant impact maken. Naast de opdracht ben je regelmatig met je collega’s van de IT-afdeling om bijvoorbeeld onderlinge kennis te delen, of nieuwe trends te bespreken. Ook worden er regelmatig

Bekijk vacature »

Medior/Senior Front-end Developers gezocht (Utrech

Functie Het team bestaat uit 10+ gespecialiseerde (veel senior) front-end ontwikkelaars en ontwerpers die werken aan projecten voor klanten van verschillende groottes (kan twee jaar bezig zijn met 1 klant). Je helpt klanten met ingewikkelde front-end vraagstukken, hierbij kun je denken aan: UX/UI design, CI/CD, architectuur en integratie met back-end systemen. De werkzaamheden verricht je op locatie bij de klant, dit is vaak in de Randstad. De organisatiestructuur is plat en er heerst een informele sfeer, zo kun je met vragen dus terecht bij de directie. Er wordt veel nadruk gelegd op het bevorderen van persoonlijke ontwikkeling door middel van

Bekijk vacature »

Junior Low-code ontwikkelaar gezocht omgeving Arnh

Bedrijfsomschrijving Wij zijn een dynamisch IT-bedrijf dat zich richt op het stroomlijnen van bedrijfsprocessen en het creëren van ondersteunende applicaties. Onze kracht ligt in het combineren van zakelijk inzicht met IT-expertise via gestroomlijnde procesontwerpen en wendbare applicatieontwikkeling met behulp van Low-code technologieën. Als jonge professional krijg je de kans om samen te werken met een team van 15 deskundige collega's, verspreid over nationale en internationale locaties. We bieden je een leerzame omgeving waar je je vaardigheden kunt ontwikkelen en groeien in je rol als Low-code ontwikkelaar. Word jij onze nieuwe Junior Low-code Ontwikkelaar (OutSystems)? Versterk ons team en draag bij

Bekijk vacature »

Medior/senior Front-end developer (Vue.js)

Functie Als Front-end developer ben je uiteindelijk overkoepelend aan de slag voor de 3 ontwikkelteams die ieder aan een specifiek product werken. In samenwerking met de UX-designer en de huidige Front-end developer zorg je voor gebruiksvriendelijke software. Lijkt het jou interessant om complexe problemen op te lossen en feautures naar een hoger niveau te tillen? En vind je het niet erg om oudere delen van de applicaties te refactoren i.c.m. het toevoegen van nieuwe functionaliteiten? Dan komen wij graag met je in contact. Eisen • HBO werk- en denkniveau (ze kijken niet naar papieren, maar naar denkniveau, motivatie en zelfredzaamheid)

Bekijk vacature »

C#.NET Developer

Functieomschrijving Voor een software ontwikkelaar in de omgeving van Vught zijn we op zoek naar een gemotiveerde C# ontwikkelaar. Deel jij hun passie voor development en dan vooral in C#.NET? Dan kan dit wel eens jouw droombaan zijn! Jouw werkzaamheden zullen er ongeveer als volgt uit gaan zien Door de wensen van de klant goed te begrijpen ga jij aan de slag dit om te zetten naar passende oplossingen en werk je deze uit tot een sterk eindproduct. Je gaat je bezighouden met de ontwikkeling van webapplicaties en websites, dit doe je door middel van ASP.NET, MVC Frameworks en C#.

Bekijk vacature »

Machine Software Developer

Bij een bedrijf in de machinebouw, regio Roosendaal, zijn we op zoek naar een: Machine Software Developer Waar ga je werken? Onze opdrachtgever is gespecialiseerd in de grondverzetmachines. Al meer dan 50 jaar leveren ze zowel nationaal als internationaal diverse machines. Het is een familiebedrijf met een informele werksfeer. Wat ga je doen? Als Machine Software Developer ben je verantwoordelijk voor: - Je ontwerpt, ontwikkelt en debugt software voor machinebesturingssystemen en complexe landbouwmachines; - Je stelt gebruikersinterfaces op (cabinedisplays); - Op termijn ga je softwareprojecten leiden voor specifieke machines; - Inclusief planning, documentatie en validatie; - Om specificaties te verifiëren

Bekijk vacature »

Belastingdienst - Freelance Applicatieontwikkelaar

Startdatum: 01.06.2023 Richttarief: €65,00 - €75,00 Duur van de opdracht: 6 maanden Uren per week: 36 Taal: Nederlands vereist! Gelieve in het Nederlands te solliciteren. Hybride. Kantoordagen in Utrecht, incidenteel in Apeldoorn Functieomschrijving: De afdeling IV – Generieke Voorzieningen – Interactie Online is onderdeel van de keten Interactie. De missie van de keten is: “het faciliteren van de interactie met alle burgers, bedrijven en hun vertegenwoordigers om hen in staat te stellen aan hun fiscale verplichtingen te voldoen en aanspraak te maken op hun rechten.” De afdeling Interactie Online heeft een belangrijke bijdrage binnen deze keten. Dit door het ontwikkelen

Bekijk vacature »

PHP Developer

Functie Middels Scrum en sprints bouw jij in deze functie mee aan complexe webapplicaties en ons SaaS platform. Hierbij hoort ook architectuur tot een van je taken. Daarnaast ben je één van de leden van het Scrum team. Dat betekent dat je naast je kerntaken ook in contact staat met de product owner. Oftewel, je bent bij het gehele ontwikkelproces betrokken. Tools die hierbij gebruikt worden zijn o.a. PHP, Symfony en Git. Eisen • Minimaal HBO werk- en denkniveau • Minimaal 3 jaar aantoonbare ervaring met PHP • Kennis en ervaring Symfony (Laravel is pré) & Lando • Kennis van

Bekijk vacature »

Back End Developer .NET

Dit ga je doen Ontwikkelen in C# .NET en werken aan nieuwbouw, uitbouw en onderhoud van de software (die communiceren met 68.000 sensoren, waardoor er meerdere miljoenen berichten per uur verwerkt worden); Samenwerken in Scrum Teams; Meewerken aan verschillende, uitdagende projecten; Werken met nieuwe technologieën en vrijheid krijgen om jezelf te ontwikkelen en door te groeien. Hier ga je werken Je komt als Developer te werken bij een organisatie die gespecialiseerd is in software die real-time wordt gebruikt. De software constateert waar werk moet worden uitgevoerd en de chauffeurs worden met een andere applicatie hierop geattendeerd. Ook wordt er direct

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:14:56
 
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.