Какой лучший способ вызвать контроллер с MVC? - PullRequest
2 голосов
/ 29 октября 2011

Я довольно новичок в архитектуре MVC, но я неплохо подхожу к этому, имея почти готовую собственную платформу.

Тем не менее, у меня возникла «проблема дизайна», как назватьконтроллер?

Контроллер, как в функции, которая проверяет, нажал ли пользователь кнопку подтверждения.

Пример контроллера:

$class->login($_POST['username'], $_POST['password']).

Я знаю, что многие MVC-фреймворки и приложения называют его по URL-адресу с $_GET параметрами, но я считаю, что глупо иметь один метод или один класс для каждой страницы, для которой требуется такая функция, как вход в систему.

Как вы, ребята, делаете это?Какой у вас метод для этого?

Любая помощь приветствуется!

Ответы [ 2 ]

1 голос
/ 29 октября 2011

У вас может быть базовый контроллер, который содержит функцию requireAccess ($ access_level). Другие контроллеры будут расширять этот контроллер. requireAccess () будет перенаправлять на страницу входа в систему, если отсутствует правильный уровень доступа.

Что касается перенаправления с использованием переменных GET для чистых URL-адресов в MVC, я бы не рекомендовал это. Это может вызвать проблемы в будущем с желанием переменных, которые содержат косые черты в них. Вместо этого мы обычно хотели бы получить исходный запрос uri и проанализировать его сами.

Обычно URL MVC следуют шаблону /Controller/Action/Id/etc

1 голос
/ 29 октября 2011

Возможно, вы захотите посмотреть концепцию Front Controller (и инверсию управления), которую вы, вероятно, уже используете в какой-то форме, но, возможно, не знаете ее.Front Controller анализирует URL и текущее состояние вещей и определяет, какой контроллер загружать.

В моей структуре у меня есть «маршруты», которые имеют атрибуты, один из которых «требует входа в систему».Front Controller определяет, какой «маршрут» / контроллер должен быть запущен, и проверяет предварительные условия для этого маршрута, такие как требование входа в систему.Если пользователь не вошел в систему, то вместо запрошенного «маршрута» / контроллера загружается логин «маршрут» / контроллер.Если вход в систему успешен, то управление передается соответствующему контроллеру «маршрута».

Управление каждым входом в систему не должно выполняться каждым контроллером, это должен делать только один контроллер, обычно фронтальный контроллер.Любой контроллер должен быть в состоянии загружаться по любому URL, поскольку именно фронт-контроллер определяет, какой контроллер загружать.Субконтроллеры не знают, «почему» они загружаются, только то, что они загружаются, чтобы выполнить свою 1 работу.

...