Ελεγκτές στο δικό μας MVC framework σε PHP
Όπως ήδη γνωρίζετε, όλοι οι ελεγκτές του
framework μας έχουν τη μέθοδο render, η οποία
πρέπει να καλείται για την αποστολή δεδομένων στην προβολή.
Αυτή η μέθοδος, οι δικοί μας, προσαρμοσμένοι ελεγκτές
την κληρονομούν από την γονική κλάση Controller,
που βρίσκεται στον πυρήνα. Ας φτιάξουμε αυτή την κλάση:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Όπως βλέπετε, η μέθοδος render δέχεται ως παράμετρο
το όνομα της προβολής και τα δεδομένα για
την εμφάνιση. Ας κάνουμε αυτή τη μέθοδο να επιστρέφει
ένα αντικείμενο μιας ειδικής κλάσης Page, στην
οποία θα περιέχονται πληροφορίες σχετικά με την προβολή
δεδομένων της δράσης του ελεγκτή. Σε αυτή την κλάση
θα περιέχεται το όνομα της προβολής, τα δεδομένα,
καθώς και ο τίτλος (title) της σελίδας και το όνομα του αρχείου με τη διάταξη (layout)
του site:
<?php
namespace Core;
class Page
{
private $layout;
private $title;
private $view;
private $data;
public function __construct($layout, $title, $view, $data)
{
$this->layout = $layout;
$this->title = $title;
$this->view = $view;
$this->data = $data;
}
public function __get($property)
{
return $this->$property;
}
}
?>
Τότε ο κώδικας της μεθόδου render θα
μοιάζει κάπως έτσι:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Ας εξηγήσω τι συμβαίνει εδώ. Το όνομα της προβολής
και τα δεδομένα έρχονται ως παράμετροι της μεθόδου. Ωστόσο,
στον προσαρμοσμένο ελεγκτή ορίζεται επίσης
και ο τίτλος (title) της σελίδας - μέσω της εγγραφής της ιδιότητας
title. Αυτό σημαίνει ότι στο $this->title
θα περιέχεται ο τίτλος, τον οποίο θα περάσουμε
στον κατασκευαστή (constructor) της κλάσης Page.
Υπάρχουν επίσης αποχρώσεις με το layout. Όπως γνωρίζετε,
το framework μας χρησιμοποιεί layout από το αρχείο
default.php. Στην πραγματικότητα, κάθε
δράση μπορεί να έχει και διαφορετικό layout. Για
να γίνει αυτό, χρειάζεται στην ίδια τη δράση, στην ιδιότητα layout
να γραφεί ένα διαφορετικό όνομα layout.
Πώς επιτυγχάνεται αυτό: ο γονικός ελεγκτής μας
έχει την ιδιότητα layout, η οποία από προεπιλογή
έχει την τιμή 'default.php'. Αυτό
θα είναι το layout από προεπιλογή. Ωστόσο, εάν
η δράση του προσαρμοσμένου ελεγκτή επαναορίσει
την τιμή της ιδιότητας layout, τότε και το layout
θα είναι διαφορετικό.
Αντιγράψτε τον κώδικα της κλάσης Controller και τοποθετήστε τον στο αρχείο
/core/Controller.php.
Αντιγράψτε τον κώδικα της κλάσης Page και
τοποθετήστε τον στο αρχείο /core/Page.php.