Fric-frac EventController.php
Per entiteit maken we controllerklasse. We volgen hier ook de gewoonte die in ASP.NET MVC gevolgd wordt. We beginnen met de
EventController
klasse.- De EventController klasse
<?php
/**
* Created by ModernWays
* User: Jef Inghelbrecht
* Date: 15/04/2019
* Time: 09:17
*/
namespace ModernWays\Controllers;class EventController extends \ModernWays\Controller
{...
} - Het model
- We zouden een klasse voor het model kunnen gebruiken en misschien doen we dat wel eens. Maar voorlopig houden we het bij een associatieve array. Die heeft de naam
$model
en we declaren die als een private field in de klasse:private $model = array('tableName' => 'Event', 'error' => 'Geen', 'row' => null, 'list' => null, 'listEventCategory' => null, 'listEventTopic' => null);
We maken een public getter om het model te retourneren:public function getModel() { return $this->model; }
- We zouden een klasse voor het model kunnen gebruiken en misschien doen we dat wel eens. Maar voorlopig houden we het bij een associatieve array. Die heeft de naam
- Helpers-methoden
Helpersmethoden worden door de CRUD-actiemethoden van deze klasse gebruikt.readAll
/** * helper function for this controller * read all rows from Event table and stores them in $this->model * @return void */ public function readAll() { $this->model['list'] = \ModernWays\Dal::readAll('Event'); if ($this->model['list'] ) { $this->model['message'] = "Rij uit {$this->model[tableName]} ingelezen"; } else { $this->model['message'] = "Geen rijen uit {$this->model[tableName]} ingelezen!"; $this->model['error'] = 'Dal message: ' . \ModernWays\Dal::getMessage(); } }
readAllEventCategory
Om de keuzelijst van EventCateory te vullen hebben we een methode nodig die alle rijen uit de tabel EventCategory inleest:/** * helper function for this controller * read all rows from EventCategory table * @return void */ public function readAllEventCategory() { $this->model['listEventCategory'] = \ModernWays\Dal::readAll('EventCategory'); if ($this->model['listEventCategory'] ) { $this->model['message'] = "Rij uit {$this->model[tableName]} ingelezen"; } else { $this->model['message'] = "Geen rijen uit {$this->model[tableName]} ingelezen!"; $this->model['error'] = 'Dal message: ' . \ModernWays\Dal::getMessage(); } }
readAllEventTopic
Om de keuzelijst EventTopic te kunnen vullen in de views maken we een helpersfunctie die alle rijen van de EventTopic tabel inleest:/** * helper function for this controller * read all rows from EventTopic table * @return void */ public function readAllEventTopic() { $this->model['listEventTopic'] = \ModernWays\Dal::readAll('EventTopic'); if ($this->model['listEventTopic'] ) { $this->model['message'] = "Rij uit {$this->model[tableName]} ingelezen"; } else { $this->model['message'] = "Geen rijen uit {$this->model[tableName]} ingelezen!"; $this->model['error'] = 'Dal message: ' . \ModernWays\Dal::getMessage(); } }
- index methode
Deze methode toont de start view voor de CRUD bewerkingen op de Eventtabel.- Code
/** * actionmethode Event/index * updates het model * creëert en retourneert de Event/Index view methode * @return view() */ public function index() { // wireframe: https://www.modernways.be/myap/it/project/fric-frac/Fric-frac%20Wireframes%20Person.html#editing // voor het model hebben we een lijst van events en de tabelnaam nodig $this->readAll(); // view heeft dezelfde naam als de actiemethode dus // hoeven we die niet als argument mee te geven return $this->view($this->model); }
- Test
Om de view te testen klik je op de Event tegel in de Admin/index view. Dit is het resultaat:Fric-frac View Event-Index
- Code
- insertingOne
Deze methode toont een formulier met velden waarin de gebruiker de gegevens voor een nieuwe Event kan intypen.- Deze methode insert dus geen rij in de Event tabel!
- Rechts wordt de lijst van de rijen en de Eventtabel getoond. We moeten dus alle rijen van Event inlezen.
- De keuzelijsten voor EventCategory en EventTopic moeten gevuld worden. Daarvoor lezen we de rijen van de respectievelijke tabellen in.
- Code:
/** * actionmethode Event/insertingOne * updates het model * Toont een forumulier met input velden voor het intypen van * de gegevens voor een nieuwe Event. * Retourneert de Views/Event/InsertingOne view methode * @return view() */ public function insertingOne() { // wireframe: https://www.modernways.be/myap/it/project/fric-frac/Fric-frac%20Wireframes%20Person.html#insertingOne // voor het model hebben we een lijst van events en de tabelnaam nodig $this->readAll(); // Een lijst van de rijen uit EventCategory om de dropdown te vullen $this->readAllEventCategory(); // Een lijst van de rijen uit EventCategory om de dropdown te vullen $this->readAllEventTopic(); // view heeft dezelfde naam als de actiemethode dus // hoeven we die niet als argument mee te geven return $this->view($this->model); }
- Test
Om de view te testen klik je op de Plusknop in de EventTopic/index view. Dit is het resultaat:Fric-frac View Event-InsertingOne
- createOne
- Met deze CRUD methode worden de gegevens die in het formulier zijn ingetypt in de database geïnserted. Deze methode wordt opgeroepen door op het disk-icoontje in de Event/InsertingOne view te klikken. Na het toevoegen keer je terug naar de Event/Index view en wordt de nieuw toegevoegde rij in de lijst rechts getoond.
- De de waarden uit de
$_POST
array worden in de DAL opgeschoond met behulp van dehtmlspecialchars
methode. - In het model word de starttijd en eindtijd samengesteld. Die bestaat uit de datum en de tijd.
- Vooraleer de Event/Index view op te roepen worden alle rijen uit de Event tabel opnieuw ingelezen.
- Code
public function createOne() { // we kunnen de post array niet zomaar doorgeven // start- en eindtijd moeten berekend worden, // namelijk datum + uur $newEntity = array( 'Name' => $_POST['Name'], 'Location' => $_POST['Location'], 'Starts' => $_POST['StartDate'] . ' ' . $_POST['StartTime'], 'Ends' => $_POST['EndDate'] . ' ' . $_POST['EndTime'], 'Image' => $_POST['Image'], 'Description' => $_POST['Description'], 'OrganiserName' => $_POST['OrganiserName'], 'OrganiserDescription' => $_POST['OrganiserDescription'], 'EventCategoryId' => $_POST['EventCategoryId'], 'EventTopicId' => $_POST['EventTopicId'] ); // var_dump($newEntity); // return; if (\ModernWays\Dal::create('Event', $newEntity, 'Name')) { $model['message'] = "Rij toegevoegd! {$newEntity['Name']} is toegevoegd aan Event"; } else { $model['message'] = "Oeps er is iets fout gelopen! Kan {$newEntity['Name']} niet toevoegen aan Event"; $model['error'] = \ModernWays\Dal::getMessage(); } // Lees alle rijen opnieuw in om de tabel in Index view rechts // te kunnen vullen $this->readAll(); // view heeft een andere naam als de actiemethode dus // moeten we die als argument mee te geven return $this->view($model, 'Views/Event/Index.php'); }
- Test
Klik op disk-icoontje in de Event/InsertingOne view om de rij aan de Eventtabel toe te voegen.
- readingOne
- Met deze methode halen we een rij op uit de Event tabel en laden de Event/ReadingOne view. Deze methode wordt opgeroepen wanneer de gebruiker op het pijl-icoontje drukt in de lijst rechts op scherm van alle Events.
- We lezen alle rijen EventCategory en EventTopic in omdat we de namen van de categorieën en topics moeten opzoeken.
- Code:
/** * actionmethode Event/readingOne * updates het model, leest een rij en alle rijen in * Toont een view met de gegevens van 1 rij en rechts een lijst * van alle rijen * Retourneert de Views/Event/ReadingOne view methode * @return view() */ public function readingOne() { // wireframe: https://www.modernways.be/myap/it/project/fric-frac/Fric-frac%20Wireframes%20Person.html#readingOne // de $paramterValue werd ingesteld met de static dispatch methode // en is zelf static. Dat wil zeggen deze waarde behoort tot // de klasse en niet tot het object of de instantie $id = self::$parameterValue; $this->model['row'] = \ModernWays\Dal::readOne('Event', $id); $this->readAll(); // Een lijst van de rijen uit EventCategory om de naam op te zoeken $this->readAllEventCategory(); // Een lijst van de rijen uit EventCategory om de de naam op te zoeken $this->readAllEventTopic(); foreach($this->model['listEventCategory'] as $item) { if ($item['Id'] == $this->model['row']['EventCategoryId']) { $this->model['row']['EventCategoryName'] = $item['Name']; break; } } foreach($this->model['listEventTopic'] as $item) { if ($item['Id'] == $this->model['row']['EventTopicId']) { $this->model['row']['EventTopicName'] = $item['Name']; break; } } // var_dump($this->model['listEventCategory']); // view heeft dezelfde naam als de actiemethode dus // hoeven we die niet als argument mee te geven return $this->view($this->model); }
- Resultaat:
Fric-frac View Event-ReadingOne
2019-04-16 16:47:46