Как laravel "разбирает" маршруты на составные части?

Стало любопытно, а каким образом laravel парсит маршруты и понимает какой маршрут сопоставить с правильным url? Например, что url

www.ru/post/100/comments/500

Должен обработаться соответствующим маршрутом?

Route::get('/posts/{post}/comments/{comment}', [NameConroller::class, 'show']);

На первый взгляд кажется, что

  1. мы должны входящий маршрут разбить(explode например) по /.
  2. Потом "найти" все маршруты, в которых первая часть начинается с /post
  3. Из найденных на предыдущем пункте маршрутов мы должны понять(не очевидно - как?), что /{post} соответствует любому числу. И т.д.

Возможно, кто-то копался в сорцах или просто знает как оно устроено? Было бы интересно узнать)


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

Автор решения: KordDEM

Может кому пригодится. Laravel преобразует маршрут в регулярное выражение и ищет по всем имеющимся роутам. Например роут

/posts/{post}/comments/{comment}

преобразуется в

{^/posts/(?P<post>[^/]++)/comments/(?P<comment>[^/]++)$}sDu
→ Ссылка