Εφαρμογή παραμέτρων σε διαδρομές στο MVC σε PHP
Ας δούμε την εφαρμογή του περιγραφέντος σε ένα
πιο ρεαλιστικό παράδειγμα. Ας υποθέσουμε ότι ο controller μας
PageController περιέχει έναν πίνακα σελίδων
(αυτά τα δεδομένα θα έπρεπε να τα επιστρέφει ένα model,
αλλά με τα models δεν έχουμε ασχοληθεί ακόμα, οπότε ας
μένουν τα δεδομένα προς στιγμήν αποθηκευμένα στον controller):
<?php
namespace Project\Controllers;
use Core\Controller;
class PageController extends Controller
{
private $pages;
public function __construct()
{
$this->pages = [
1 => 'page 1',
2 => 'page 2',
3 => 'page 3',
];
}
}
?>
Ας φτιάξουμε μια δράση show, η οποία
θα εμφανίζει στην οθόνη μια σελίδα με έναν συγκεκριμένο
αριθμό (id):
<?php
namespace Project\Controllers;
use Core\Controller;
class PageController extends Controller
{
private $pages;
public function __construct()
{
$this->pages = [
1 => 'page 1',
2 => 'page 2',
3 => 'page 3',
];
}
public function show()
{
// εδώ θα εμφανίσουμε τη σελίδα με τον συγκεκριμένο αριθμό
}
}
?>
Ας υποθέσουμε ότι κατά την πρόσβαση στη διεύθυνση /page/1/
να εμφανίζεται το κείμενο της πρώτης σελίδας, κατά
την πρόσβαση στη διεύθυνση /page/2/ -
το κείμενο της δεύτερης σελίδας και ούτω καθεξής. Ας φτιάξουμε
την αντίστοιχη διαδρομή:
<?php
use \Core\Route;
return [
new Route('/page/:id/', 'page', 'show'),
];
?>
Ας υλοποιήσουμε την περιγραφείσα μέθοδο show:
<?php
namespace Project\Controllers;
use Core\Controller;
class PageController extends Controller
{
private $pages;
public function __construct()
{
$this->pages = [
1 => 'page 1',
2 => 'page 2',
3 => 'page 3',
];
}
public function show($params)
{
echo $this->pages[ $params['id'] ]; // εμφανίζουμε τη σελίδα βάσει αριθμού
}
}
?>
Υλοποιήστε τον controller UserController,
που περιέχει τον ακόλουθο πίνακα:
<?php
$this->users = [
1 => ['name'=>'user1', 'age'=>'23', 'salary' => 1000],
2 => ['name'=>'user2', 'age'=>'24', 'salary' => 2000],
3 => ['name'=>'user3', 'age'=>'25', 'salary' => 3000],
4 => ['name'=>'user4', 'age'=>'26', 'salary' => 4000],
5 => ['name'=>'user5', 'age'=>'27', 'salary' => 5000],
];
?>
Στον controller UserController, φτιάξτε
μια δράση show, που θα εμφανίζει
έναν χρήστη βάσει συγκεκριμένου id. Ας είναι
προσβάσιμη από διεύθυνση της ακόλουθης μορφής:
/user/:id/.
Στον controller UserController, φτιάξτε
μια δράση info, που θα εμφανίζει
το όνομα ή την ηλικία ενός συγκεκριμένου χρήστη. Ας είναι
αυτή η δράση προσβάσιμη από διεύθυνση της ακόλουθης
μορφής: /user/:id/:key/, όπου το key
θα έχει τιμή 'name', 'age'
ή 'salary'.
Στον controller UserController, φτιάξτε
μια δράση all, που θα εμφανίζει
τη λίστα όλων των χρηστών στην οθόνη. Ας είναι αυτή η δράση
προσβάσιμη από διεύθυνση της ακόλουθης μορφής:
/user/all/ (δεν υπάρχουν παράμετροι εδώ
καθόλου).
Στον controller UserController, φτιάξτε
μια δράση first, που θα εμφανίζει
τη λίστα των N πρώτων χρηστών στην οθόνη. Ας είναι
αυτή η δράση προσβάσιμη από διεύθυνση της ακόλουθης
μορφής: /user/first/:n/, όπου στην παράμετρο
θα είναι ο αριθμός των χρηστών που πρέπει να
εμφανιστούν στην οθόνη.