Трудно понять, для чего предназначены некоторые из этих переменных при развертывании, но просто взглянув на то, что здесь, есть несколько вещей, которые вы могли бы рассмотреть.
Вы можете поместить переключатель для определения уровня пользователя в защищенный метод родительского класса. Таким образом, логика для проверки уровня пользователя может быть вызвана render_page в любом из дочерних контроллеров. Вы можете передать значение из get_admin_category и вернуть строку, чтобы оператор switch можно было использовать повторно.
Кроме того, какова цель буферизации вывода в вашем примере? Я вижу, вы включаете свой шаблон в последний раз на include $backbone
, но по какой причине вы делаете буферизацию? В большинстве выпущенных MVC контроллер выполняет некоторую предварительную обработку, вызывает методы модели и упорядочивает данные, а затем просто передает их представлению, которое является единственным представлением клиенту (например, я знаю, что CodeIgniter выполняет это, передавая ' массив вывода в представление, которое может содержать значения для вывода через эхо и т. д.). Не должно быть необходимости задерживать вывод на клиент, поскольку в большинстве MVC это происходит только после загрузки представления.
Начиная с использования вами суперглобального $ _REQUEST, вы полагаетесь на это при выполнении маршрутизации запросов к реальным сценариям на сервере (я могу ошибаться в этом, просто пытаясь интерпретировать то, что дано.) Многие MVC также будет использовать mod_rewrite () для выполнения всей маршрутизации к одной точке входа (Front Controller), а затем полагаться на сценарий для обработки всей маршрутизации, вызывая дочерние конструкторы из путей в URL. Это прекрасный учебник для упражнений, а не для развертывания, в целях:
http://www.phpaddiction.com/tags/axial/url-routing-with-php-part-one/
Если вы делаете это как упражнение в понимании паттерна Front Controller, существует множество отличных фреймворков, на которые вы могли бы взглянуть и научиться некоторым трюкам. CodeIgniter и Kohanna - отличные, относительно легкие, которые позволяют легко заглянуть под капот. Очевидно, что Zend очень популярен.