vani8987 / mini-framework
Небольшой PHP-фреймворк с роутингом, запросами, ответами, доступом к базе данных, миграциями и логированием.
Requires
- php: >=8.0
- vlucas/phpdotenv: ^5.6
README
Небольшой PHP-фреймворк с роутингом, JSON-ответами, запросами, PDO, миграциями, логированием и сессионной авторизацией.
Авторизация
Фреймворк включает авторизацию на основе сессий, защищённые маршруты и контракт модели для поиска пользователей. Описание находится в документации по авторизации.
Рабочая демонстрация находится в app/Controllers/AuthController.php,
Routes/api.php и database/Migrations/002_CreateUsers.php.
app/Middleware/AuthMiddleware.php содержит проверку авторизованного
пользователя. Метод userAuth() берёт auth_user_id из сессии, проверяет
наличие пользователя в таблице users и возвращает true или false.
Возможности
Routerдля URL-маршрутов с параметрами;- route-level middleware для проверок до вызова контроллера;
Requestдля данных изPOST, query-параметров, cookie, сессии и JSON;Responseдля JSON-ответов;ConnectDB,CRUDиCreateTableдля MySQL через PDO;MigrationManagerс историей миграций;Loggerс файлами вlog/.
CORS
Точка входа разрешает запросы с любого origin, чтобы пример API было удобно
проверять через браузер. Перед production-развёртыванием замени * в
public/index.php на адреса разрешённых клиентов.
Установка для разработки
composer install
После добавления новых классов или изменения PSR-4 namespace обнови autoload:
composer dump-autoload
Создай .env из .env.example, укажи параметры MySQL и создай базу данных.
После этого можно запускать миграции:
php command.php migrate:run
Повторный запуск применит только новые миграции.
Локальный сервер:
php command.php serve
Установка через Composer
новый API-проект можно создать одной командой:
composer create-project vani8987/mini-framework project-name
Демонстрационное API авторизации
Сначала запусти миграции, которые создадут таблицу users:
php command.php migrate:run
В консоли браузера зарегистрируй пользователя:
fetch('/auth/register', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: 'user@example.com', password: 'secret', }), }) .then((response) => response.json()) .then((data) => console.log(data));
Выполни вход:
fetch('/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: 'user@example.com', password: 'secret', }), }) .then((response) => response.json()) .then((data) => console.log(data));
Получи данные текущего пользователя:
fetch('/auth/me') .then((response) => response.json()) .then((data) => console.log(data));
Когда JavaScript и API работают на одном домене и порту, браузер сам отправит cookie сессии после входа.
Доступны маршруты POST /auth/register, POST /auth/login,
GET /auth/me и POST /auth/logout.
Структура
Core/ Классы фреймворка
app/ Контроллеры API-приложения
Routes/ Регистрация маршрутов приложения
database/Migrations/ Миграции приложения
docs/ Документация классов
log/ Логи времени выполнения
public/ HTTP-точка входа
Подробности находятся в docs/README.md.
Лицензия
Проект распространяется по лицензии MIT.
DI-контейнер и bootstrap приложения описаны в docs/container.md.