PHP Mikmak Category Controller
Category
controller klasse dispatcht alle request die verband houden met het beheer van de Category
entiteit. Dat komt neer op het afhandelen van alle use cases die we hebben opgesteld voor het beheren van de entiteit Category
.Het klassenbestand toevoegen
Stap 1
Klik met de rechtermuisknop op de Controller map en kies ervoor om een nieuw PHP bestand toe te voegen. Geef er de naam Category.php aan.
Stap 2
De Category controller klasse moet overerven van de Threepenny MVC Controller klasse. En de Controller klasse staat in de namespace \ModernWays\Mvc\Controller
.
<?php /** * Created by PhpStorm. * User: Jef Inghelbrecht * Date: 27/12/2015 * Time: 22:57 */ namespace ModernWays\Webshop\Controller; class Category extends \ModernWays\Mvc\Controller { }
Methoden toevoegen
De Editing methode toevoegen
De editing methode handelt de Category-editing
use case af. We raadplegen Mikmak use case Editing UnitBase om nog eens na te gaan wat die methode precies moet doen.
Om een lijst van alle bestaande categoriën op de pagina te kunnen tonen moeten we instantie van onze Dal klasse maken, alle rijen uit de tabel Category ophalen en die in ons model stoppen. Dat doen we met de readingAll
methode. We geven tenslotte de naam van de map waarin de view staat, de naam van het viewbestand en een referentie naar het model door aan de view.
public function editing() { $model = new \ModernWays\Webshop\Model\Category($this->noticeBoard); $provider = new \ModernWays\AnOrmApart\Provider('WebwinkelOVH', $this->noticeBoard); $dal = new \ModernWays\Webshop\Dal\Category($model, $provider); $dal->readingAll(); return $this->view('Category', 'Editing', $model); }
De CreatingOne methode toevoegen
Om naar de CreatingOne pagina te kunnen navigeren moeten we de use case Category-creatingOne implementeren. Deze link staat op de Editing.php viewpagina .
We maken daarvoor een methode maken in de Category
controller klasse die het klikken op de link in de Editing.php viewpagina afhandelt. De naam van de methode moet de afspraken, die gelden binnen het MVC framework, respecteren en moet dus CreatingOne
zijn. Dat is dezelfde naam als het twee deel van de use case. Het eerste deel van de use case verwijst naar de naam van de controller. We lezen alle rijen van de Category
tabel in en retourneren een CreatingOne
view voor de Category
entiteit. We geven een een leeg model mee. We kunnen evengoed NULL
gebruiken.
public function creatingOne() { $model = new \ModernWays\Webshop\Model\Category($this->noticeBoard); $provider = new \ModernWays\AnOrmApart\Provider('WebwinkelOVH', $this->noticeBoard); $dal = new \ModernWays\Webshop\Dal\Category($model, $provider); $dal->readingAll(); return $this->view('Category', 'CreatingOne', $model); }
De CreateOne methode toevoegen
De CreateOne
methode wordt opgeroepen door op de Insert button te kilikken die op de CreatingOne
View pagina staat. De submit knop activeert het form element. Met de methode post wordt de het action attribuut Category-createOne
naar de server gestuurd. We moeten nu de waarden, die de gebruiker heeft ingetypt in de tekstboxen, met de setters van het Category model object instellen.
We maken een instantie van de Category
model klasse, kennen waarden toe aan de eigeschappen van de instantie. Vervolgens roepen we de methode CreateOne
van de Dal
klasse op om de nieuwe categorie aan de tabel toe te voegen.
Tenslotte retourneert de CreateOne
actiemethode de CreatingOne View page tesamen met een instantie van de Category
model klasse. De eigenschappen van de instantie bevatten de nieuwe waarden.
public function createOne() { // var_dump($_POST); $model = new \ModernWays\Webshop\Model\Category($this->noticeBoard); $provider = new \ModernWays\AnOrmApart\Provider('WebwinkelOVH', $this->noticeBoard); $dal = new \ModernWays\Webshop\Dal\Category($model, $provider); $model->setName(filter_input(INPUT_POST, 'Category-Name', FILTER_SANITIZE_STRING)); $model->setDescription(filter_input(INPUT_POST, 'Category-Description', FILTER_SANITIZE_STRING)); $dal->createOne(); // Refresh list $dal->readingAll(); return $this->view('Category', 'CreatingOne', $model); }
De ReadingOne actiemethode toevoegen
Om naar de ReadingOne pagina te kunnen navigeren moeten we de use case Category-readingOne, die staat op de op alle pagina's waarop een lijst met categorieën staat waaruit een categorie geselecteerd kan worden, implementeren. Daarvoor moeten we een methode maken in de Category
controller klasse die het klikken op de select link <a href="index.php?uc=Category-readingOne_<?php echo $item['Id'];?>">
afhandelt. De naam van de methode, geheel volgens de afspraken binnen het MVC framework, is dus ReadingOne
. Dat is dezelfde naam als het twee deel van de use case. Het eerste deel van de case verwijst naar de naam van de controller, entiteit en view. Deze naam is de naam van de actiemethode in de Category
controller klasse en de naam van de view die door deze methode geretourneerd wordt.
De link, die deze use case in gang zet, staat in de partial view met de naam View/Category/ReadingAll.php. De html code daarvoor ziet er zo uit:
<a href="index.php?uc=Category-readingOne_<?php echo $item['Id'];?>"> <span class="icon-close"></span><span class="screen-reader-text">Select</span></a>
De actiemethode ReadingOne
in de Category controller klasse, die deze use case afhandelt, zoekt de rij op basis van de meegegeven Id. Hoe die Id als parameter wordt doorgegeven aan de actiemethode in de controller klasse wordt in het bestand Webwinkel\vendor\modernways\mvc\src\RouteConfig.php bepaald.
public function readingOne() { $model = new \ModernWays\Webshop\Model\Category($this->noticeBoard); $provider = new \ModernWays\AnOrmApart\Provider('WebwinkelOVH', $this->noticeBoard); $dal = new \ModernWays\Webshop\Dal\Category($model, $provider); $model->setId($this->route->getId()); $dal->readingOne(); $dal->readingAll(); return $this->view('Category', 'ReadingOne', $model); }
De UpdatingOne actiemethode toevoegen
Om naar de UpdatingOne
pagina te kunnen navigeren moeten we de use case Category-updatingOne
, die staat op de ReadingOne
pagina staat, implementeren. Daarvoor moeten we een methode maken in de Category
controller klasse die het klikken op de Updating knop afhandelt. De Id van
de te updaten rij staat in een hidden input veld op de ReadingOne.php viewpagina. De naam van de methode, geheel volgens de afspraken binnen het MVC framework, is dus UpdatingOne
. Dat is dezelfde naam als het twee deel van de use case. Het eerste deel van de use case verwijst naar de naam van de controller. Deze naam is de naam van de actiemethode in de Category
controller klasse en de naam van de view die door deze methode geretourneerd wordt.
public function updatingOne() { $model = new \ModernWays\Webshop\Model\Category($this->noticeBoard); $provider = new \ModernWays\AnOrmApart\Provider('WebwinkelOVH', $this->noticeBoard); $dal = new \ModernWays\Webshop\Dal\Category($model, $provider); $model->setId(filter_input(INPUT_POST, 'Category-Id', FILTER_SANITIZE_NUMBER_INT)); $dal->readingOne(); $dal->readingAll(); return $this->view('Category', 'UpdatingOne', $model); }
De UpdateOne methode toevoegen
De UpdateOne
methode wordt opgeroepen door op de Update button te kilikken die op de UpdatingOne
View pagina staat. De submit knop activeert het form element. Met de methode post wordt het action attribuut Category-updateOne van de knop naar de server gestuurd. We moeten nu de waarden, die de gebruiker heeft ingetypt in de tekstboxen, met de setters van het model object instellen.
We maken een instantie van de Category
model klasse, kennen waarden toe aan de eigeschappen van de instantie. Vervolgens roepen we de methode UpdateOne
van het Dal object op om de nieuwe categorie aan de tabel toe te voegen.
Tenslotte retourneert de UpdateOne
actiemethode de ReadingOne
View page tesamen met een instantie van de geüpdatete rij.
public function updateOne() { $model = new \ModernWays\Webshop\Model\Category($this->noticeBoard); $provider = new \ModernWays\AnOrmApart\Provider('WebwinkelOVH', $this->noticeBoard); $dal = new \ModernWays\Webshop\Dal\Category($model, $provider); $model->setId(filter_input(INPUT_POST, 'Category-Id', FILTER_SANITIZE_NUMBER_INT)); $model->setName(filter_input(INPUT_POST, 'Category-Name', FILTER_SANITIZE_STRING)); $model->setDescription(filter_input(INPUT_POST, 'Category-Description', FILTER_SANITIZE_STRING)); $dal->updateOne(); $dal->readingAll(); // read modified record again $dal->readingOne(); return $this->view('Category', 'ReadingOne', $model); }
De DeleteOne methode toevoegen
De knop die deze actiemethode oproept staat op Mikmak View Category ReadingOne View. Het eerste deel van de use case is de naam van de controllerklasse, het tweede deel de naam van de actiemethode. De Id
staat in een hidden input element.
De DeleteOne
methode haalt de Id
van de te deleten rij op uit met model. Verder maken we een instantie van de modelklasse Category aan en van de Dal klasse en roepen diens DeleteOne
methode op om de rij te deleten.
public function deleteOne() { $model = new \ModernWays\Webshop\Model\Category($this->noticeBoard); $provider = new \ModernWays\AnOrmApart\Provider('WebwinkelOVH', $this->noticeBoard); $dal = new \ModernWays\Webshop\Dal\Category($model, $provider); $model->setId(filter_input(INPUT_POST, 'Category-Id', FILTER_SANITIZE_NUMBER_INT)); $dal->deleteOne(); $dal->readingAll(); return $this->view('Category', 'Editing', $model); }