2017-11-15
Введение.
Простое приложение реализующее шаблон проектирования - MVC на базе SILEX (PHP микро-фреймворка, созданного на основе Symfony2 компонентов). Некоторые идеи мной были заимствованы с проекта GitHub (silex-enhanced). С документацией по SILEX можно познакомиться здесь. Примеры установки фреймворка приведены для ОС "Windows" и веб сервера Nginx.
Этот проект на GitHub можно посмотреть здесь
Подробную документацию можно посмотреть здесь
Ресурсы
Работа приложения
Основные характеристики приложения:
- приложение реализует простое приложение управления блогом;
- расширяется с помощью конфигурационных файлов, расположенных в
app/Resources/Сonfig
; - работает как веб или как консольное приложение;
- с помощью консольного приложения можно выполнять разные служебные задачи (пр. создание БД
app/Console/scripts/orm/schema_create.bat
); - для примера с помощью консольного приложения реализована работа с сервисом UBKI;
- реализована локализация для двух языков: английский, русский;
- обеспечивается процесс регистрации, аутентификации и авторизации пользователей;
- в БД созданы два пользователя с соответствующими правами. Администратор (login=admin; pass=foo) User (login=user; pass=foo);
- использует БД типа SqlLite
app/Resources/db/app.db
; - работа с БД обеспечивается с помощью Doctrine(DBAL, ORM)
vendor/doctrine
и PHP ActiveRecordlibrary/AR
; - реализована возможность вывода данных по страницам с помощью библиотеки Pagerfanta
library/Pagerfanta
; - используется шаблонизатор Twig
vendor/twig
; - для работы с почтой используется библиотека SwiftMailer
vendor/swiftmailer
; - добавлены сервисы такие как Zend-Filter, Zend-Json и др.
vendor/zendframework
; - так же добавлены сервисы для работы с массивами, строками, XML, HTTP, Markdown
app/Services/My
; - на стороне клиента используются библиотеки : jQuery, Bootstrap 3, RequireJS, Backbone, Vue
public/js/lib
; - на стороне клиента используются сервисы: Datepicker, FormValidation, MaskInput, Highlight
public/js/app/services
; - для примера работы фреймворка Backbone.js реализовано приложение
ToDo
для локального или серверного хранилищ данныхpublic/js/app/bb-todo
; - для примера работы фреймворка Vue.js реализовано приложение
ToDo
для локального хранилища данныхpublic/js/app/vue-todo
.
Установка
Предварительные требования
Развертывание
- Клонировать silex-mvc проект с помощью git.
- Выполнить
composer install
. - Для создания базы данных выполнить командный файл из консоли
app/Console/scripts/orm/schema_create.bat
, предварительно отредактировав пути кphp.exe
и кapp\Console\index.php
; - Сконфигурируйте веб сервер, чтобы точка входа была
public/index.php
. - Установите, если необходимо, соответсвующие права на запись в
path/to/project/var
. - Введите адрес сайта в броузер
Конфигурация
parameters.yml
Здесь устанавливаются значения основных параметров вашей конфигурации, которые могут использоваться в других ваших конфигурациях. Значения параметров можно получить через $app['config']['parameters']
.
config.yml
Общая конфигурация используется как веб приложением так и консольным приложением. Разместите данные о ваших общих сервисах в секции service_providers
см. пр.1.
...
service_providers:
swiftmailer:
class: Silex\Provider\SwiftmailerServiceProvider
parameters:
swiftmailer.options:
host: %mail.host%
port: %mail.port%
username: %mail.username%
password: %mail.password%
encryption: %mail.encryption%
auth_mode: %mail.auth_mode%
...
console.yml или application.yml
Конфигурации соответственно применяются для консольного и веб приложений. Если вы используете в ваших конфигурациях выражение imports
, то ваш конфиг будет рекурсивно объединен с конфигом указанным в выражении imports
.
security.yml
Здесь устанавливаются значения способа аутентификации пользователя и его авторизации. С подробностями можно познакомиться сдесь.
env.yml
Часто необходимо иметь разные значения для разных настроек в зависимости от среды, в которой выполняется приложение. Например, вы можете захотеть использовать разные драйвера кэша на локальном и производственном (продакшн) серверах. Это легко достигается использованием настроек, зависящих от среды.
Для решения этой задачи можно создать файл env.yml
с вашими специфическими настройками и разместить его в корне вашего приложения. Этот файл будет замещать файл parameters.yml
, где установлены основные параметры вашей конфигурации.
Структура приложения
Silex-MVC проект имеет файловую структуру, показанную ниже см. пр.2.
пр.2
|-- 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)
Приложение имеет следующую файловую структуру см. пр3.
пр.3
|-- app/
|-- Console/ # Консольное приложение
|-- Controllers/ # Контроллеры
|-- Forms/ # Формы
|-- Models/ # Модели (AR, DBAL, ORM)
|-- Providers/ # Провайдеры
|-- Resources/ # Ресурсы (конфигурация, база данных, локализация)
|-- Services/ # Сервисы ( дополнительные классы)
|-- Views/ # Пользовательский интерфейс
`-- Bootstrap.php # Класс загрузчика для веб приложения
Последовательность выполнения веб приложения следующая.
Request --> index.php --> Bootstrap.php --> Controller --> Response
Структура веб приложения (public)
Публичные данные имеют следующую файловую структуру см. пр.5
пр.5
|-- public/
| |-- css/ # Каскадные стили
| |-- fonts/ # Фонты
| |-- img/ # Изображения
| |-- js/ # Java Scripts
| |-- schemes/ # Схемы
| |-- .htaccess
| |-- favicon.ico
| `-- index.php # Вход в приложение
Входной точкой в приложение является файл - index.php
.
Основной набор Java Script библиотек, сервисов и фреймворков имеют следующую файловую структуру см. пр.6
пр.6
|-- 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
Для работы приложения на стороне клиента основные ресурсы загружаются с помощью макета app/Views/Layout/base.html.twig
.
Сюда входят следующие ресурсы:
- Bootstrap является самым популярным HTML, CSS, JS фреймворком для создания гибких, мобильных проектов в интернете.
- Font Awesome дает вам масштабируемые векторные иконки, которые мгновенно могут быть настроены - по размеру, цвету и всему, что может быть сделано с помощью CSS.
- Google fonts Фонты, с помощью которых можно отображать текст на вашем сайте.
- jQuery - библиотека JavaScript, фокусирующаяся на взаимодействии JavaScript и HTML. Библиотека jQuery помогает легко получать доступ к любому элементу DOM, обращаться к атрибутам и содержимому элементов DOM, манипулировать ими. Также библиотека jQuery предоставляет удобный API для работы с AJAX.
Структура консольного приложения
Использует Symfony 2
компоненты, которые облегчают создание удобного интерфейса командной строки см. пр4.
|-- 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
.