Понять маршрутизацию URL в MVC - PullRequest
       3

Понять маршрутизацию URL в MVC

2 голосов
/ 01 сентября 2010

Я пытаюсь создать очень простую инфраструктуру MVC, чтобы лучше понять шаблон.

У меня проблемы с пониманием части маршрутизации URL.До сих пор я понял, что URL содержит 3 основных элемента информации в этом формате: www.site.com/controller/method/querystring

Итак, учитывая следующий URL:

www.site.com/user/delete/john

'user' is the controller
'delete' is the method of said controller
'john' is the query string

В моем фреймворке он у меня есть, поэтому, если в URL не указан контроллер, по умолчанию используется «index».Если метод, если он не указан в URL, по умолчанию используется «show» (который просто выводит html).

таким образом, я могу перейти на www.site.com, и так как у него нет контроллераили метод в URL, контроллер становится «index», а метод «show», таким образом, просто загружая представление индекса.

Но что, если я не хочу предоставлять метод в URL, а просто www?.site.com / controller / querystring примерно так: www.site.com/user/john

В идеале это может загрузить профиль для Джона.Но фреймворк думает, что «john» в URL-адресе - это метод для вызова, а не строка запроса.

Что является стандартным, практическим способом различения двух?

ps:

У меня есть это в моем .htaccess

RewriteRule ^(.*)$ index.php?$1 [L,QSA]

отображение $ _SERVER ['QUERY_STRING'] в http://site/profile/john дает 'профиль /джон '/

1 Ответ

2 голосов
/ 01 сентября 2010

Мои контроллеры обычно находят метод-обработчик, который ищет более или менее конкретный метод.Если метод найден, он вызывается с "хвостом" параметров, переданных ему.Например, если задано user/delete/john, оно пытается вызвать в следующем порядке:

 action_user_delete_john()
 action_user_delete('john')
 action_user('delete/john')
 generic_fallback_method('user/delete/john')

В вашем случае я бы определил набор user_<operation> методов (action_user_delete, action_user_editи т. д.) и метод action_user по умолчанию, который будет вызываться при отсутствии параметра operation и должен обрабатывать URL-адреса, такие как user/john

. Я считаю этот метод довольно гибким и мощным, но стандарт не существуетВы можете изобретать свои собственные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...