Реализацияи роутер дар фреймворки MVC

Биёед ҳоло заготовкаи синфи Router-ро мувофиқи даъватҳои худ нависед:

/core/Router.php<?php
  namespace Core;
  
  class Router
  {
    private $routes;
    
    public function getTrack($routes, $uri)
    {
      // код дар ин ҷо хоҳад буд
    }
  }
?>

Дар усули getTrack мо бояд муайян кунем, ки кадом як аз роутҳо ба ин $uri мувофиқ аст. Барои ин, мо бояд массивро бо роутҳо бо силсилаи такрорӣ тафтиш кунем:

/core/Router.php<?php
  namespace Core;
  
  class Router
  {
    public function getTrack($routes, $uri)
    {
      foreach ($routes as $route) {
        // тафтиши $uri ва $route
      }
    }
  }
?>

Агар як роут ба URI мувофиқат кунад, мо бояд аз ин URI қиматҳои параметрҳои роутро гирифта ва объекти синфи Track-ро баргардонем:

/core/Router.php<?php
  namespace Core;
  
  class Router
  {
    public function getTrack($routes, $uri)
    {
      foreach ($routes as $route) {
        if (тафтиши мувофиқатии роут ва URI) {
          $params = ; // бояд параметрҳо аз uri гирифта шаванд
          return new Track($route->controller, $route->action, $params);
        }
      }
      
      return new Track('error', 'notFound'); // агар ҳеҷ як роут мувофиқ наояд
    }
  }
?>
Задание 1

Заготовкаи синфи Router-и манро нусхабардорӣ кунед ва онро дар файли /core/Router.php ҷойгир кунед.

Задание 2

Синфи тавсифшудаи Router-ро амалӣ кунед, ки натиҷаи худ объекти синфи Track-ро бармегардонад. Агар ба мушкилот дучор шавед (ки эҳтимол аст), ба коди ибтидоии фреймворки он чизе ки шумо истифодаи MVC-ро аз рӯи он омухтед, нигаред. Дар он ҷо дар синфи Router шумо қисми кофии амалӣ кардан ва тавзеҳоти манро ба он хоҳед ёфт.