Ўз 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

Track класси объектини қайтарувчи Router классини амалга оширинг. Агар қийинчиликка йўлиқсангиз (эҳтимоли жуда юкори), MVC дан фойдаланишни ўрганган фреймворкингизнинг боşланғич кодига қаранг. У ерда Router классида амалга оширишнинг етишмайётган қисми ва унинг изоҳларини топа оласиз.