Как написать такую проверку роутера?
Пишу свой роутер, остановился на проверку роутера 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