Εφαρμογή παραμέτρων σε διαδρομές στο MVC σε PHP

Ας δούμε την εφαρμογή του περιγραφέντος σε ένα πιο ρεαλιστικό παράδειγμα. Ας υποθέσουμε ότι ο controller μας PageController περιέχει έναν πίνακα σελίδων (αυτά τα δεδομένα θα έπρεπε να τα επιστρέφει ένα model, αλλά με τα models δεν έχουμε ασχοληθεί ακόμα, οπότε ας μένουν τα δεδομένα προς στιγμήν αποθηκευμένα στον controller):

project/controllers/PageController.php<?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):

project/controllers/PageController.php<?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/ - το κείμενο της δεύτερης σελίδας και ούτω καθεξής. Ας φτιάξουμε την αντίστοιχη διαδρομή:

/project/config/routes.php<?php
  use \Core\Route;
  
  return [
    new Route('/page/:id/', 'page', 'show'),
  ];
?>

Ας υλοποιήσουμε την περιγραφείσα μέθοδο show:

project/controllers/PageController.php<?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'] ]; // εμφανίζουμε τη σελίδα βάσει αριθμού
    }
  }
?>
Задание 1

Υλοποιήστε τον controller UserController, που περιέχει τον ακόλουθο πίνακα:

php<?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],
  ];
?>
Задание 2

Στον controller UserController, φτιάξτε μια δράση show, που θα εμφανίζει έναν χρήστη βάσει συγκεκριμένου id. Ας είναι προσβάσιμη από διεύθυνση της ακόλουθης μορφής: /user/:id/.

Задание 3

Στον controller UserController, φτιάξτε μια δράση info, που θα εμφανίζει το όνομα ή την ηλικία ενός συγκεκριμένου χρήστη. Ας είναι αυτή η δράση προσβάσιμη από διεύθυνση της ακόλουθης μορφής: /user/:id/:key/, όπου το key θα έχει τιμή 'name', 'age' ή 'salary'.

Задание 4

Στον controller UserController, φτιάξτε μια δράση all, που θα εμφανίζει τη λίστα όλων των χρηστών στην οθόνη. Ας είναι αυτή η δράση προσβάσιμη από διεύθυνση της ακόλουθης μορφής: /user/all/ (δεν υπάρχουν παράμετροι εδώ καθόλου).

Задание 5

Στον controller UserController, φτιάξτε μια δράση first, που θα εμφανίζει τη λίστα των N πρώτων χρηστών στην οθόνη. Ας είναι αυτή η δράση προσβάσιμη από διεύθυνση της ακόλουθης μορφής: /user/first/:n/, όπου στην παράμετρο θα είναι ο αριθμός των χρηστών που πρέπει να εμφανιστούν στην οθόνη.