Что это такое
Вот что я сделал до сих пор:
- ядро /
- контроллеры / (содержит контроллеры, используемые приложением)
- модели / (содержит модели, используемые приложением)
- views / (содержит представления, используемые приложением)
- base_controller.php (контроллер расширяется)
- base_model.php (модель расширяется)
- вендоры /
- phprouter / (простой класс маршрутизатора)
- прыщ / (простой контейнерный класс DI)
- configuration.php (содержит все настройки приложения)
- index.php (включает конфигурацию, поставщиков, базовую модель, базовый контроллер, устанавливает контейнер DI и направляет запрос)
См. Код здесь: http://pastebin.com/pxUpUvv6
Обратите внимание, что данный код является лишь примером, поэтому контроллеры, модели, представления еще не созданы. Кроме того, он может содержать ошибки - как не проверенные - но сейчас это не имеет значения.
Поток запросов
- Клиент запрашивает index.php .
- Конфигурация, поставщики, базовый контроллер, базовая модель включены.
- Контейнер DI и зависимости инициализированы, теперь мы можем внедрить их в любое место.
- Мы отображаем контроллеры на URL, и маршрутизатор выполняет свою работу.
- Контроллер извлекается (хотя этого нет в коде примера, как отмечено выше).
- Мы кое-что делаем.
- Затем метод вызывает
::call_model()
, который включает соответствующую модель из core / models / , а затем вызывает тот же метод, который мы используем из соответствующего класса модели.
- Модель получена.
- Больше вещей.
- Затем модель вызывает
::call_view()
', что включает соответствующий вид из core / views / .
- Представление извлекается и визуализирует страницу для клиента.
К вашему сведению: соответствует
Примеры контроллера, модели, вид которых соответствует:
- Контроллер
Controller_Products::list()
на ядро / контроллеры / Controller_Products.php
- Модель
Model_Products::list()
как ядро / модели / Model_Products.php
- Просмотр в core / views / Model_Products_list.php
Проблемы, с которыми сталкиваются
На самом деле, я чувствую себя немного неловко с этой структурой. Не знаю, кажется, это далеко от масштабируемости, модуляции ...
- только базовая папка структура -
core{, /controllers, /models/, /views}
, vendors
в корне - выглядит хорошо для вас?
- Я чувствую, что должен получить
__autoload()
вне index.php , что мне кажется слишком большим. Если да, то как насчет контейнера DI?
- Может быть, если мне понадобится более двух внешних библиотек, лучше не включать их вручную, вручную? Но как?
- Помещение всей конфигурации в файл configuration.php в корне выглядит для меня как старомодный PHP4. Благодаря мощности Pimple , я мог встраивать эту конфигурацию прямо в нее, но пока, где?
- Я думаю, что способ обработки
::call_model()
( core / base_controller.php ) и ::call_view()
( core / base_model.php ) немного неудобен. Вы бы согласились? Какой был бы упрощенный способ переделать все это?
- Учитывая все мои проблемы, лучше ли мне в конечном итоге использовать фреймворк как Symfony?
Если что-то не понятно, не стесняйтесь спрашивать.
Спасибо.