Как написать такую проверку роутера?

Пишу свой роутер, остановился на проверку роутера uri, сейчас у меня есть вот такой массив с роутерами

return [
   // mysite.ru
   new Route('/', 'home', 'index'),
   // mysite.ru/@user - вот это не работает, он ничего вообще не возвращает
   new Route('/@:name', 'user', 'index')
]

Я хочу чтобы можно было получить профиль по второму маршруту, как правильно это сделать? Как правильно регулярное выражение сделать? Сейчас у меня вот такое:

foreach ($routes as $route) {
   $pattern = $this->createPattern($route->path); // см. описание метода
   if (preg_match($pattern, $uri, $params) {
     return new Track($route->controller, $route->action, $params);
   }
}
private function createPattern($path)
{
    return '#^' . preg_replace('#/:([^/]+)#', '/(?<$1>[^/]+)', $path) . '/?$#';
}

В $params я получаю массив, скажем если у меня маршрут вот так /test/:id и я перейду по адресу вот такому mysite.ru/test/123 то я получаю 123 в массиве, а ключ его будет id


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