Skip to content

iamkayrkayr/rpm-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Введение

Самопальный нативный мини-движок, типичный MVC, структура проекта и идеология вдохновлены Laravel. Реализован кастомный автозагрузчик классов - boot/autoloader.php. Требуемая версия PHP - 7.4, поскольку:

  • предпочитаю использовать типизированные поля классов (7.4+)
  • nullable-типы в сигнатурах функций и методов (7.1+)
  • скалярные типы в сигнатурах функций и методов (7.0+)
  • типы значений, возвращаемых методами и функциями (7.0+)
  • coalesce-оператор "??" (удобно для доступа к полям массивов и объектов без проверки наличия соответствующих ключей) (7.0+)
  • интерфейс \Throwable (7.0+)

Точка входа - public/index.php

Код загрузки приложения - boot/app.php

Контроллер - callable-переменная: функция либо массив типа [object, string]. В случае массива можно передавать дополнительные аргументы: [object, string, ...args] Если контроллер не определён (переменная равна null) - выводится 404 Результаты запуска определённого контроллера:

  • массив - возврат json-строки
  • скалярная величина - возврат как есть
  • null и прочее - ответ 200, пустой вывод

Манера написания sql-запросов через implode() частично вдохновлена механизмом dbDelta() из WordPress.

Для стилей используется язык scss.

Не использовал Vue и PHP-фреймворки умышленно. Хотелось показать, как обходиться без них.

Разворот проекта

  • git clone https://github.com/kayr-zhakupov/rpm-demo.git
  • создать пустую базу данных mysql
  • создать приложение в консоли разработчика ВКонтакте (тип: Сайт; адрес сайта: http://localhost:8001; базовый домен: localhost)
  • запустить скрипт /scripts/jumpstart.php
  • заполнить файл /env/env.php нужными значениями (vk_client_id - ID приложения; vk_client_secret - защищённый ключ)
  • запустить скрипт /scripts/db-migrate.php
  • (опционально; css-файл уже скомпилирован) sass ./resources/scss/account-index.scss ./public/css/gen/account-index.css
  • (опционально; css-файл уже скомпилирован) sass ./resources/scss/base.scss ./public/css/gen/base.css
  • php -S localhost:8001 -t public (из корневой папки проекта)

Что можно было ещё добавить и оптимизировать

  • подключить кастомные скрипты для независимой минификации css и js, вместе с autoprefixer; НЕ webpack, поскольку он работает только с bundles
  • unique index (owner_id, name) для таблицы tags
  • unique index (target_id, tag_id) для таблицы tags_with_users
  • поле 'is_deleted' в таблице tags_with_users вместе с ON CONFLICT запросами

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published