Помогите организовать контроллеры логически - PullRequest
2 голосов
/ 30 марта 2010

Я работаю над сайтом, который я разрабатываю, используя структуру 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), но это вызовет бесконечный цикл перенаправления, поэтому мне нужно придумать лучший способ справиться с этим.

В общем, имеет ли смысл такая настройка ?! Благодарен за любые отзывы.

1 Ответ

1 голос
/ 30 марта 2010

Мои контроллеры расположены так:

/**
* Global controller
*/

class MY_Controller extends Controller {

 function __construct() {
  parent::__construct();

  // Load templates, modules etc
 }
}


/**
* Admin controller
*/


class Admin_Controller extends MY_Controller {

 function __construct() {
  parent::__construct();

  // Check admin is logged in
 }
}

/**
* User controller
*/

class User_Controller extends MY_Controller {

 function __construct() {
  parent::__construct();

  // Check user is logged in

 }
}

Любая страница пользователя будет расширять User_Controller, а страница администратора будет расширять Admin_Controller таким образом, что вы можете легко включить аутентификацию без многих головных болей и сохранить все это отдельно.

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