Dezvoltarea unui router în propriul framework MVC

Acum trebuie să dezvoltați un router. Acesta este o clasă care va lua un array de rute, va lua URL-ul solicitat, și va determina care rută corespunde acestui URL. După găsirea rutei corespunzătoare, clasa noastră trebuie să obțină părțile URL-ului, corespunzătoare parametrilor rutei.

Fie ca router-ul nostru să returneze un obiect al clasei Track, care conține numele controlerului care trebuie apelat pentru această solicitare, numele acțiunii și parametrii din URL.

Fie ca clasa noastră Track să aibă proprietățile controller, action și params, accesibile doar pentru citire:

/core/Track.php<?php
  namespace Core;
  
  class Track
  {
    private $controller;
    private $action;
    private $params;
    
    public function __construct($controller, $action, $params)
    {
      $this->controller = $controller;
      $this->action = $action;
      $this->params = $params;
    }
    
    public function __get($property)
    {
      return $this->$property;
    }
  }
?>

Exemplu

De exemplu, să presupunem că în bara de adrese a fost introdus /test/1/2/. Să presupunem că avem o rută, corespunzătoare acestei adrese:

/project/config/routes.php<?php
  new Route('/test/:var1/:var2/', 'test', 'index');
?>

Aceasta înseamnă că numele controlerului va fi test, numele acțiunii - index, iar array-ul de parametri va fi următorul:

php<?php
  ['var1' => 1, 'var2' => 2]
?>

Scopul acestei lecții este de a scrie clasa Router, care returnează un obiect al clasei Track. Restul nu ne preocupă momentan. Să începem scrierea acestei clase.

Sarcini practice

Задание 1

Copiați codul clasei mele Track și plasați-l în fișierul /core/Track.php.