Search by

qu1styy / php_practik

Qu1styy

practik

Package info

github.com/Qu1styy/php_practik

Type:project

pkg:composer/qu1styy/php_practik

Statistics

Installs: 20

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-09-18 18:55 UTC

This package is auto-updated.

Last update: 2026-09-18 18:55:29 UTC


README

Учебное PHP-приложение для управления пользователями, кафедрами и дисциплинами. Проект демонстрирует построение небольшого MVC-приложения без полноценного фреймворка: собственные маршрутизация, контейнер приложения, провайдеры, middleware, аутентификация, HTML-представления и JSON API.

Возможности

  • регистрация, вход и выход пользователя;
  • просмотр и редактирование профиля;
  • управление пользователями;
  • управление кафедрами и дисциплинами;
  • связи между пользователями, кафедрами и дисциплинами;
  • авторизация веб-части через сессию;
  • авторизация API через Bearer-токен;
  • CSRF-защита POST-запросов веб-части;
  • обработка JSON-тела API-запросов;
  • HTML-рендеринг через PHP-шаблоны и общий layout;
  • JSON-ответы для API;
  • SQL-дамп MySQL с таблицами и демонстрационными данными.

Стек

  • PHP: 7.4+ согласно composer.json; для текущих dev-зависимостей рекомендуется PHP 8.x.
  • База данных: MySQL.
  • ORM: Eloquent из illuminate/database.
  • Маршрутизация: nikic/fast-route.
  • Зависимости: illuminate/events, qu1styy/validator, qu1styy/collect.
  • Frontend: PHP-шаблоны и Bootstrap 5.3, подключаемый через CDN.
  • Web-сервер: Apache с mod_rewrite либо совместимый сервер, настроенный на public/.

Архитектура

.
├── app/
│   ├── Controller/       Контроллеры Site и Api
│   ├── Middlewares/      Авторизация, CSRF, JSON, trim и очистка спецсимволов
│   ├── Model/            Eloquent-модели User, Post, Department и др.
│   └── Providers/        Инициализация настроек, маршрутов, БД и авторизации
├── config/               Конфигурация приложения, путей и подключения к БД
├── core/
│   ├── bootstrap.php     Создание приложения и подключение Composer
│   └── Src/              Ядро: Application, Route, Request, View, Auth и Settings
├── public/
│   └── index.php         Front controller — единственная публичная точка входа
├── routes/
│   ├── web.php           HTML-маршруты
│   └── api.php           API-маршруты с префиксом `/api`
├── views/
│   ├── layouts/          Общий layout
│   └── site/              Страницы сайта и формы
├── бе/
│   ├── pkpkrges_m4 (1).sql  SQL-дамп схемы и данных
│   └── ...                  Методические материалы и заметки
├── composer.json
└── .htaccess

Как проходит запрос

public/index.php запускает core/bootstrap.php, который подключает Composer и создаёт Src\Application. Провайдеры из config/app.php загружают настройки, подключают Eloquent, инициализируют аутентификацию и регистрируют маршруты. RouteProvider выбирает веб-маршруты или API-маршруты по префиксу /api, после чего Src\Route запускает middleware и вызывает метод контроллера.

Веб-контроллеры возвращают представления из views/site через Src\View и layout views/layouts/main.php. API-контроллер Controller\Api возвращает JSON; защищённый endpoint /api/profile проверяет заголовок Authorization: Bearer ....

Установка

Требования

  • PHP 8.x;
  • Composer;
  • MySQL 8.x или совместимый сервер;
  • Apache с включённым mod_rewrite либо эквивалентная настройка маршрутизации;
  • расширения PHP для MySQL и работы с JSON/сессиями.

1. Клонирование и зависимости

git clone https://github.com/Qu1styy/php_practik.git
cd php_practik
composer install

vendor/ не хранится в репозитории и создаётся командой composer install.

2. Создание базы данных

Создайте базу данных с именем pkpkrges_m4, затем импортируйте SQL-дамп:

mysql -u root -p pkpkrges_m4 < "бе/pkpkrges_m4 (1).sql"

Либо импортируйте файл через phpMyAdmin. Дамп содержит таблицы users, roles, genders, departments, disciplines и таблицы связей между ними.

3. Настройка подключения

Параметры базы данных находятся в config/db.php:

return [
    'driver' => 'mysql',
    'host' => 'database',
    'database' => 'pkpkrges_m4',
    'username' => 'root',
    'password' => 'change-me',
];

Перед запуском замените host, username и password на значения своей среды. Не коммитьте реальные пароли в репозиторий; в текущем проекте конфигурация подключения хранится в PHP-файле, поэтому для production рекомендуется вынести секреты в переменные окружения.

4. Настройка пути приложения

В config/path.php параметр root задаёт путь приложения относительно домена:

'root' => 'php_practik',

Если проект доступен из корня домена, установите пустое значение:

'root' => '',

Если приложение размещено в /php_practik, оставьте значение php_practik.

Запуск

Вариант 1: Apache

Укажите корень проекта как DocumentRoot или разместите проект в каталоге Apache. В репозитории есть два правила .htaccess: корневое перенаправляет запросы в public/, а public/.htaccess передаёт неизвестные файлы в public/index.php.

Откройте в браузере:

http://localhost/php_practik/

Вариант 2: встроенный сервер PHP

Для локальной проверки можно запустить встроенный сервер с публичным каталогом:

php -S localhost:8000 -t public

При таком варианте config/path.php обычно должен содержать:

'root' => '',

Откройте http://localhost:8000/.

Веб-маршруты

Метод Путь Назначение
GET / Главная страница, доступна авторизованным пользователям
GET, POST /signup Регистрация
GET, POST /login Вход
GET /logout Выход
GET /profile Профиль пользователя
GET, POST /profile/edit Редактирование профиля
GET, POST /users Список пользователей
GET, POST /users/add Добавление пользователя
GET, POST /user Карточка пользователя
GET, POST /departments Список кафедр
GET, POST /department Карточка кафедры
GET, POST /department/add Добавление кафедры
GET, POST /disciplines Список дисциплин
GET, POST /discipline Карточка дисциплины
GET, POST /discipline/add Добавление дисциплины

Большинство маршрутов требует сессионной авторизации и при отсутствии входа перенаправляет пользователя на /login.

API

Все API-маршруты имеют префикс /api.

Метод Endpoint Авторизация Назначение
GET /api/ Нет Возвращает список записей Post в JSON
POST /api/echo Нет Возвращает переданные данные
POST /api/auth Нет Проверяет login и password, возвращает API-токен
GET /api/profile Bearer Возвращает профиль текущего пользователя

Пример получения токена:

curl -X POST http://localhost:8000/api/auth \\
  -H 'Content-Type: application/json' \\
  -d '{"login":"ivanov","password":"your-password"}'

Пример запроса к защищённому endpoint:

curl http://localhost:8000/api/profile \\
  -H 'Authorization: Bearer YOUR_TOKEN'

Важные замечания по безопасности

Проект предназначен для учебного и демонстрационного использования. Перед публикацией в production необходимо как минимум:

  • заменить демонстрационные учётные данные и не хранить их в Git;
  • заменить MD5 в Model\User на password_hash() и password_verify();
  • проверить коды HTTP-ответов для ошибок API;
  • отключить вывод полного объекта исключения в public/index.php;
  • вынести настройки БД и другие секреты в переменные окружения;
  • проверить права доступа к административным операциям;
  • добавить тесты для маршрутов, middleware, авторизации и валидации;
  • проверить кодировку импортируемого SQL-файла и корректность данных перед загрузкой.

Лицензия

Проект распространяется под лицензией MIT, согласно composer.json.

Автор

Qu1styy