PHP MVC. Как получить GET запросы

Сайт должен при нажатии на кнопку открывать книгу с определенным id. Таких книг может быть сотни. Каким образом я могу вывести их если каждый путь мне придется прописывать в routes.php. Хочу получить один из таких результатов: bookshop/books/25 либо bookshop/books?id=25. Класс Router.php по своей логике делает редирект на главную страницу, т.к эти пути не прописаны в routes.php. Даже если я уберу редирект из-за неправильного пути, то мне всё равно придётся прописывать каждый айдишник в routes. Это бессмысленно по понятным причинам. Как мне нужно дописать Router.php чтобы все заработало?

Router.php

class Router
{

    protected $routes = [];
    protected $params = [];

    function __construct() {
        $arr = require 'application/config/routes.php';
        foreach ($arr as $key => $val) {
            $this->add($key, $val);
        }
    }

    public function add($route, $params) : void {
        $route = '#^' . $route . '$#';
        $this->routes[$route] = $params;
    }

    public function match() : bool {
        $url = trim($_SERVER['REQUEST_URI'], '/');
        foreach ($this->routes as $route => $params) {
            if(preg_match($route, $url, $matches)) {
                $this->params = $params;
                return true;
            }
        }
        return false;
    }

    public function run() : void {
        if($this->match()) {
            $path = 'application\controllers\\' . ucfirst($this->params['controller']) . 'Controller';
            if(class_exists($path)) {
                $action = $this->params['action'] . 'Action';
                if(method_exists($path, $action)) {
                    $controller = new $path($this->params); 
                    $controller->$action();
                } else { View::errorCode(404); }
            } else {View::errorCode(404); }
        } else { View::redirectToMain(); }
    }

}

routes.php (Разрешенные пути)

<?php

return [

    'main' => [
        'controller' => 'main',
        'action' => 'index'
    ],

    '' => [
        'controller' => 'main',
        'action' => 'index'
    ],
    
    'login' => [
        'controller' => 'account',
        'action' => 'login'
    ],

    'signup' => [
        'controller' => 'account',
        'action' => 'signup'
    ],
    
    'admin' => [
        'controller' => 'adm',
        'action' => 'adminpanel'
    ]
];

Ответы (0 шт):