Базовый проект
Silex-MVC проект имеет файловую структуру, показанную ниже.
|-- app/
| |-- Console/ # Консольное приложение
| |-- Controllers/ # Контроллеры
| |-- Forms/ # Формы
| |-- Models/ # Модели (AR, DBAL, ORM)
| |-- Providers/ # Провайдеры
| |-- Resources/ # Ресурсы (конфигурация, база данных, локализация)
| |-- Services/ # Сервисы ( дополнительные классы)
| |-- Views/ # Отображение данных
| `-- Bootstrap.php # Класс загрузчика
|
|-- data/ # Данные (кеш, логи)
|-- library/ # Библиотеки (AR, Pagerfanta)
|-- public/
| |-- css/ # Каскадные стили
| |-- fonts/ # Фонты
| |-- img/ # Изображения
| |-- js/ # Java Scripts
| |-- schemes/ # Схемы
| |-- .htaccess
| |-- favicon.ico
| `-- index.php # Вход в приложение
|-- vendor/ # Внешние библиотеки
|-- LICENSE.md
|-- README.md
|-- README-RU.md
|-- composer.json
`-- composer.lock
Silex-MVC состоит из двух независимых приложений. Это Веб приложение и Консольное приложение. Эти приложения конфигурируются по разному, хотя у них есть общие файлы конфигурации и общие библиотеки.
Структура веб приложения (app)
Приложение имеет следующую файловую структуру.
|-- app/
|-- Console/ # Консольное приложение
|-- Controllers/ # Контроллеры
|-- Forms/ # Формы
|-- Models/ # Модели (AR, DBAL, ORM)
|-- Providers/ # Провайдеры
|-- Resources/ # Ресурсы (конфигурация, база данных, локализация)
|-- Services/ # Сервисы ( дополнительные классы)
|-- Views/ # Пользовательский интерфейс
`-- Bootstrap.php # Класс загрузчика для веб приложения
Загрузчик (Bootstrap.php) для веб приложения
Последовательность выполнения веб приложения следующая.
Request --> index.php --> Bootstrap.php --> Controller --> Response
Загрузчик выполняет следующие задачи:
- Создание приложения
// Create app
$app = new Silex\Application();
$this->app = $app;
- Создание обработчиков
middleware
- Инициализация профайлера
- Инициализация конфигурации приложения
- Инициализация провайдеров
- Инициализация сервисов
- Инициализация контроллеров
- Инициализация самого приложения
Контроллеры
Используются для обработки запросов от клиента и решают ряд задач:
- Обработка ошибок (
app/Controllers/ErrorController.php
) - Общие задачи: смена языка, смена цветовой схемы, лицензия, readme (
app/Controllers/IndexController.php
) - Управление блогом (
app/Controllers/BlogController.php
) - Регистрация, аутентификация и авторизация пользователей (
app/Controllers/SecurityController.php
) - Управление списком задач (
app/Controllers/TodoController.php
) - Тестирование работы сервиса UBKI (
app/Controllers/UbkiController.php
) - Демонстрация некоторых возможностей (
app/Controllers/TestController.php
)
Все эти контроллеры, наследуют общий класс app/Controllers/BaseController.php
, который определяет общие методы для всех контроллеров.
Формы
Использует Symfony 2
компоненты, которые облегчают создание, отображение и валидацию форм.
|-- app/
|-- Forms/ # Формы
|-- Constraints/ # Правила валидации форм
|-- PostForm.php # Форма для добавления/редактирования сообщений пользователя
`-- RegForm.php # Форма для регистрации нового пользователя
Модели
Набор классов, который обеспечивает работу с базой данных. Для тестирования и проверки реализовано три технологии работы с базой данных:
- Doctrine(DBAL)
vendor/doctrine
- Doctrine(ORM)
vendor/doctrine
- PHP ActiveRecord
library/AR
Провайдеры
Провайдеры app/Providers
позволяют разработчику повторно использовать части приложения в других частях приложения.
Silex предоставляет два типа провайдеров, определенных двумя интерфейсами:
ServiceProviderInterface
и ControllerProviderInterface
для контроллеров.
В нашем приложении используются провайдеры: для базы данных, для конфигурации, для создания моделей и другие ...
Ресурсы
Служат для хранения файлов конфигурации, базы данных и для локализации приложения.
|-- app/
|-- Resources/ # Ресурсы
|-- Config/ # Файлы конфигурации
|-- db/ # База данных `SqlLite` (`app.db`)
|-- fakedata/ # Данные для заполнения базы данных при создании приложения
|-- translations/ # Файлы для локализации приложения
Сервисы
Silex не только фреймворк, он является также сервисным контейнером. Он достигает этого, расширяя Pimple который обеспечивает очень простой сервисный контейнер.
Наше приложение содержит разные виды сервисов для работы с массивами, строками,
XML, HTTP, Markdown app/Services/My
. А также сервисы такие как Zend-Filter,
Zend-Json и другие vendor/zendframework
;
|-- app/
|-- Services/ # Сервисы
|-- My/ # Сервисы для работы с XML, HTTP, строками, массивами и другие...
|-- MyService.php # Базовый класс для добавления сервисов
`-- Zf2Service.php # Класс для добавления `Zend` сервисов
Отображение данных
В приложении используется шаблонизатор Twig
|-- app/
|-- Views/ # Отображение данных
|-- Controller/ # Отображения при обращении к контроллеру
|-- Form/ # Отображение форм
|-- Include/ # Отдельные части отображений
`-- Layout/ # Макет
Twig - современный шаблонизатор для PHP
Twig как шаблонизатор по синтаксису чем-то похож на Smarty и не уступает в гибкости XSLT.
Основные его особенности:
- Быстрый: компилирует шаблоны в PHP код.
- Безопасный: есть режим «песочницы» для проверки сомнительного кода в шаблонах. Это позволяет использовать Twig в качестве языка шаблонов для приложений, где пользователи могут менять дизайн шаблонов.
- Гибкий: основан на пластичном парсере. Это позволяет разработчику определять свои собственные теги и фильтры, создавать свой DSL.
Структура веб приложения (public)
Публичные данные имеют следующую файловую структуру.
|-- public/
| |-- css/ # Каскадные стили
| |-- fonts/ # Фонты
| |-- img/ # Изображения
| |-- js/ # Java Scripts
| |-- schemes/ # Схемы
| |-- .htaccess
| |-- favicon.ico
| `-- index.php # Вход в приложение
Входной точкой в приложение является файл - index.php
.
Java Scripts
Это набор библиотек, сервисов и фреймворков на уровне клиента.
|-- public/
|-- js/ # Java Scripts
|-- app/
| |-- bb-todo/ # Компоненты реализующие тестовый пример `ToDo`
# на основе фреймворка `Backbone`
| |-- services/ # Сервисы: `Datepicker`, `FormValidation`, `MaskInput`, `Highlight`
| |-- app.js # `App` класс
| |-- lang.js # `Lang` класс
| `-- system.js # `System` класс
|
|-- lib/ # Библиотеки
`-- main.js # Инициализация Requirejs
Структура консольного приложения
Использует Symfony 2
компоненты, которые облегчают создание удобного интерфейса командной строки.
|-- app/
|-- Console/ # Консольное приложение
|-- Commands/ # Набор команд: для работы с базой данных и др.
|-- Views/ # Текстовые данные, использующие шаблонизатор `Twig`
|-- scripts/ # Набор командных файлов
|-- Bootstrap.php # Класс загрузчика
`-- index.php # Вход в консольное приложение
Последовательность выполнения консольного приложения следующая.
script.bat --> index.php --> Bootstrap.php --> Command(s) --> Output
Для конфигурации консольного приложения используется файл конфигурации
app/Resources/Config/parameters.yml
, а также app/Resources/Config/console.yml
,
который наследует параметры конфигурации из файла app/Resources/Config/config.yml
.