MVC begin

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.Net Front-end Ontwikkelaar

Wij zoeken een .Net Front-end Ontwikkelaar! Omschrijving Kun jij snel schakelen en ben je stressbestendig? Dan zoeken wij jou! Als .Net Front-end Ontwikkelaar help je mee aan de webapplicatie die over de hele wereld door allerlei bedrijven wordt gebruikt. Je werkt daarnaast mee aan nieuwe en verbeterde functionaliteiten en helpt met het oplossen van bugs. Over de opdrachtgever Je komt te werken in een ambitieus team dat zich blijft ontwikkelen. Dit is alle informatie die we nu kunnen delen over de werkplek. Als jij de .Net Front-end Ontwikkelaar bent voor deze job, vertellen we je snel nóg meer. Eisen Heb

Bekijk vacature »

Junior PHP Developer

Functieomschrijving Junior PHP Developer gezocht! Voor een opdrachtgever in de regio Gelderland zijn wij op zoek naar een Junior PHP Developer die onderdeel gaat worden van het ontwikkelingsteam van deze organisatie. In deze functie ga jij aan de slag met het schrijven van software voor de aansturing van en het managen van windparken en bijbehorende onderdelen. Hiernaast ga jij je bezighouden met het ontwikkelen, testen en onderhouden van diverse webapplicaties. Het team waarin je komt te werken bestaat uit 3 developers, hierdoor krijg je veel verantwoordelijkheid en de kans om jezelf verder te ontwikkelen. Er wordt echter wel van je

Bekijk vacature »

C++ Ontwikkelaar

Functieomschrijving Ben jij toe aan een nieuwe uitdaging en werk je graag en goed in C++ en C#? Dan zijn we op zoek naar jou! Dit bedrijf is dé specialist op het gebied van automatiseringssoftware voor een specifieke branche en ze zijn per direct op zoek naar versterking in hun development team. Wat jij gaat doen binnen jouw rol als C++ ontwikkelaar; Je vertaalt de wensen van gebruikers naar een functioneel ontwerp. Je houdt je bezig met het ontwerpen, programmeren en testen van product aanpassingen. Je gaat nieuwe product releases implementeren in de projectteams. Je gaat de effecten van nieuwe

Bekijk vacature »

PHP Programmeur

Functieomschrijving Vanuit het hoofdkantoor in omgeving Breda, ontwikkel je als PHP programmeur niet alleen webapplicaties, maar ben je verder ook gefocust op het constant inspelen op nieuwe innovaties m.b.t software ontwikkeling. Naast het ontwikkelen van webapplicaties, bouwt deze toffe werkgever ook webshops en websites voor hun opdrachtgevers. Wat ga je doen? Het testen van ontwikkelde applicaties om te zorgen dat ze goed functioneren en voldoen aan de eisen van de klanten; Het ontwerpen en implementeren van webapplicaties met het Symfony framework; Het schrijven van een schone en efficiënte code volgens het Symfony framework; Onderhouden en updaten van bestaande applicaties die

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 »

Social Media Specialist

Social Media Specialist locatie: Rotterdam (Zuid Holland) Wij zoeken op korte termijn een nieuwe collega, een social media specialist/ adviseur sociale media (24 uur), voor ons sprankelende team Communicatie van CJG Rijnmond. Onze focus ligt op het informeren en binden van onze in- en externe klanten en stakeholders en het versterken van onze naamsbekendheid en zichtbaarheid. Dat doen we in nauwe samenwerking met elkaar. Over de functie Ons team bestaat uit 7 communicatieprofessionals met ieder een eigen expertise. Als lid van het online team ben je verantwoordelijk voor het ontwikkelen, uitvoeren en analyseren van onze socialemediastrategie. Ook stel je campagnes

Bekijk vacature »

App Developer

Samen werken aan een gezonder Nederland en toekomstbestendige zorg voor iedereen. Dat is de impact die jij kan hebben als App Developer bij VGZ. Wil jij een bijdrage leveren aan een maatschappij waarin iedereen zich thuis voelt? Bekijk dan de vacature. Uit onderzoek van Computable is VGZ verkozen tot ‘beste niet-ICT werkgever voor ICT’ers van Nederland’ Hoe ook jij het verschil maakt Als App developer werk jij aan het belangrijkste communicatiekanaal van VGZ, namelijk de App! Als App developer bij VGZ maak je onderdeel uit van een van onze App-teams. Met een goede mix van kennis en ervaring zet je

Bekijk vacature »

Laravel Developer

Functie omschrijving Voor een gave organisatie in de buurt van Den Bosch zoek ik een PHP developer. Het is van belang dat je kennis/ervaring hebt met het framework Laravel. Jij gaat in deze functie software applicaties ontwikkelen. Deze software projecten zijn heel divers, en deze organisatie maakt software, van A tot Z. Klanten kunnen in elke sector werkzaam zijn, van profit tot non-profit. Andere taken zijn onder andere: documentatie schrijven over applicaties/uitleg geven over software en applicaties/ klantcontact over bestaande applicaties/applicaties optimaliseren. Bedrijfsprofiel Deze organisatie zit in de regio van Den Bosch en is een klein bedrijf. Er werken circa

Bekijk vacature »

Senior Front-end Developer

Wordt jij de nieuwe Front end specialist / developer? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. 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 binnen als

Bekijk vacature »

C++ Developer

Functieomschrijving Ben jij als software engineer toe aan een nieuwe uitdaging? Dan zijn wij op zoek naar jou! Voor het maken van de procesbesturingsoftware gebruiken onze projectteams een in C++ en C# geschreven tool. Dit is een gedistribueerd object framework wat alle kernfuncties biedt voor een procesautomatisering. Verder zullen jouw werkzaamheden o.a. bestaan uit: Analyseren van vragen en wensen van gebruikers en deze vertalen naar een functioneel ontwerp; Ontwerpen, programmeren en testen van productaanpassingen; Implementeren van nieuwe productreleases in de projectteams; Continu toetsen van het effect van nieuwe releases op andere tools en processen; Inzichtelijk maken van voortgang omtrent softwarewerkzaamheden,

Bekijk vacature »

C# ontwikkelaar

Functie omschrijving Werk jij graag met C# en het .NET framework in een leuk familiebedrijf? Lees dan snel verder! Jouw takenpakket hierbij is: Je gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Je gaat werken in een Microsoft omgeving (ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Daarnaast optimaliseer je de bestaande software. Bedrijfsprofiel Deze organisatie is gevestigd in de omgeving van Best en is een echt familiebedrijf. Je komt te werken in een klein team van developers, die zich voornamelijk bezighouden met

Bekijk vacature »

No-Code Betty Blocks ontwikkelaar

Bedrijfsomschrijving Wil jij de bedrijfsprocessen van klanten revolutionair digitaliseren en optimaliseren zonder beperkt te worden door programmeertalen? Kom werken bij een snelgroeiende en professionele organisatie met een gezonde dosis humor en veel vrijheid om jezelf te ontwikkelen. Als No-Code Betty Blocks ontwikkelaar werk je vanuit ons kantoor in het hart van Nederland, je thuiswerkplek of op locatie bij de klant. We faciliteren de juiste trainingen en ondersteuning zodat je een echte Betty Blocks expert wordt. Naast het werk zijn er bij ons bijzondere events, zoals een jaarlijkse zeildag, een zomerse barbecue en een knus kerstdiner om de grillige maanden door

Bekijk vacature »

C# .NET Developer IoT SQL Server

Samengevat: Wij ontwikkelen innovatieve oplossingen om apparaten en bezittingen op een eenvoudige en flexibele manier te beveiligen. Ben jij een C# .NET developer? Heb jij ervaring met C# en SQL server? Vaste baan: C# .NET Developer IoT HBO €3.200 - €4.500 Deze werkgever is gespecialiseerd in hoogwaardige GSM/GPRS alarm- en telemetrietechnologie. Met een eigen productlijn en klantspecifieke ontwikkelingen biedt deze werkgever oplossingen om op afstand te meten, melden, loggen en aansturen, ook op plaatsen zonder stroomvoorziening. Onze producten worden gekarakteriseerd door flexibiliteit in de configuratie, betrouwbaarheid en een extreem laag stroomverbruik. Zij werken voor MKB klanten. Deze werkgever heeft veel

Bekijk vacature »

Android developer

De functie Schiphol is een plek om te reizen, te verblijven en te werken. Door middel van data en technologie richten we op al deze gebieden het leef- en werkklimaat optimaal in en zorgen we voor een slimmere en efficiëntere operatie. Wij ontwikkelen nieuwe producten en diensten vanuit de wensen en behoeften van onze klanten, voorspellen passagier flows en testen digitale oplossingen om rijen en andere pijnpunten in het proces te verminderen. Met slimme feedback van sensortechnologie maken we zelfs data van toiletten en stoelen inzichtelijk en bruikbaar. Het Commercial Platform bestaat uit multidisciplinaire teams met een end-2-end verantwoordelijkheid voor

Bekijk vacature »

Database developer - SQL

Functie omschrijving Kan jij goed overweg met complexe algoritmes en het schrijven van procedures in T-SQL? Heb jij al wat ervaring opgedaan met SQL en vind je het tijd voor de volgende stap? Lees dan snel verder! Dit software bedrijf, gespecialiseerd in de ontwikkeling van logistieke software, is op zoek naar een ervaren SQL database developer. Jouw werkzaamheden zullen onder andere bestaan uit: Je sluit aan bij meetings en brengt het gehele logistieke proces in kaart. Vervolgens ga je als lead developer aan de slag om de klus te klaren. Je stuurt het junior developer team en helpt, zo nodig,

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

23/11/2024 18:46:29
 
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.