Я работаю над сайтом, который я разрабатываю, используя структуру MVC. Мои модели будут представлять все данные на сайте, но я изо всех сил пытаюсь выбрать хорошую структуру контроллера. Сайт позволит пользователям входить в систему / регистрироваться и просматривать личные данные на нескольких страницах, но также по-прежнему иметь доступ к общедоступным страницам, например, к часто задаваемым вопросам, странице контактов и т. Д.
Это то, что у меня сейчас ...
Контроллер шаблонов, который обрабатывает отображение основного шаблона. Базовый шаблон для сайта останется неизменным вне зависимости от того, вошли вы в систему или нет.
Основной контроллер веб-сайта, который расширяет шаблонный контроллер и выполняет базовую аутентификацию. Если пользователь вошел в систему, метод конструктора User :: control_panel () вызывается из конструктора, и это создает панель управления, которая будет присутствовать в течение сеанса аутентификации. Если пользователь не вошел в систему, вместо панели управления загружается другое представление, например, с формой входа в систему. Все контроллеры, относящиеся к защищенной / общедоступной странице, расширят контроллер веб-сайта.
На домашней странице пользователя есть несколько виджетов, которые я хочу отобразить, что я делаю с помощью Home Controller, который расширяет контроллер сайта. Этот контроллер генерирует эти виджеты с помощью следующих статических вызовов:
$this->template->content->featured_pet = Pet::featured();
$this->template->content->popular_names = Pet::most_popular();
$this->template->content->owner_map = User::generate_map();
$this->template->content->news = News::snippet();
Полагаю, первое, в чем я не уверен, это в том случае, если вышеуказанные статические вызовы контроллеров (например, Pet и User) в порядке, чтобы оставаться статичными - эти статические методы будут возвращать представления, загруженные в основной шаблон. Именно так я и делал в прошлом, но мне любопытно узнать, разумный ли это подход. Другие защищенные страницы для зарегистрированных пользователей будут похожи на Home Controller.
Статические страницы будут обрабатываться Контроллером страниц, который также расширяет Контроллер веб-сайта, так что он будет знать, должна ли отображаться панель управления пользователя или форма входа в систему с левой стороны шаблона. Страницы только для защищенных членов не будут перенаправлены на контроллер страниц, этот контроллер будет обрабатывать только общедоступные страницы.
Одна проблема, с которой я столкнулся на данный момент, заключается в том, что если и открытые, и защищенные страницы расширяют контроллер веб-сайта, как мне избежать бесконечного цикла - например, идея заключается в том, что контроллер веб-сайта должен обрабатывать аутентификацию, а затем перенаправлять на запрошенный контроллер (URL), но это вызовет бесконечный цикл перенаправления, поэтому мне нужно придумать лучший способ справиться с этим.
В общем, имеет ли смысл такая настройка ?! Благодарен за любые отзывы.