Как я понимаю в паттерне MVC, при URL: http://site.com/controller/action есть контроллер (controller) и экшн (action) Но есть сайты в которых структура такова, что есть только http://site.com/динамический_параметр/ Т.е. есть некая морда сайта в корне, а все что после (показал как 'динамический параметр') там идут сами запросы, к примеру ID профилей пользователей, если в моем понимании MVC есть контроллеры и экшены, которые в коде как классы и методы, то тут (http://site.com/динамический_параметр/) как происходит обработка? Есть еще подобный вариант(http://site.com/controller/динамический_параметр/) Т.е. интересно логика реализации и является ли это тоже паттерном MVC?
А причём тут урлы и MVC? MVC - это просто разделение кода на три части, в определении MVC нету даже OOP, у меня каждый слой может быть представлен функциями или даже частями одного файла, разграниченными пустыми строками Но традиционно да, в виде контроллеров и действий реализуется. Но паттерн уж тем более не включает в себя способ преоброзования урла в пару контроллер/действие Урл типа example.com/controller/action хорош тем, что легко преобразуется в пару в автоматическом режиме, что использовано, скажем, в Yii2. Напротив, в Laravel от этого отказались, и ты все роуты прописываешь сам, получая очень большую гибкость при этом. Хотя в Yii2 тоже можно прописать нестандартные роуты, и даже запретить стандартные. Вообще, я часто делаю так: PHP: Route::get("{slug}.html", "PageController@view"); Т.е. выглядит как будто у меня статические странички, и заодно признак, чтоб отличать от других урлов - .html в конце
Да, реальный адрес предварительно транслируется во внутренний/технический формат, но вам ничего не мешает напрямую закрепить за каждым роутом контроллер, экшин или что-то еще. --- Добавлено --- Простейший пример: https://php.ru/forum/threads/ustanovochnye-moduli-v-svoej-cms.75327/#post-593482 (только там экшин не упоминается, т.к. мы обычно используем REST с единым дефолтным обработчиком или с несколькими дефолтными обработчиками, закрепленными за HTTP-методами запросов, но можно добавить и отдельное поле для этого или указывать имя экшина через какой-то разделитель, как выше показали). --- Добавлено --- Еще один наглядный пример с короткими ссылками, использующий ту же модель данных. Также можно просто определить низкоприоритетный роут с общей маской, охватывающей, например, все однокомпонентные пути.