Реализация роутера в своем 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 вы найдете недостающую часть реализации и мои комментарии к ней.