Пример проекта, разработанного на учебном движке (MCV-фреймворке) SimpleMVC.
ВНИМАНИЕ: о composer-е и остальных моментах см. в уроках по SimpleMVC.
- Делаем форк репозитория https://github.com/it-for-free/SimpleMVC-example и клонируем его из своего гитхаб-профиля на компьютер.
- Создаём у себя на машине виртуальный хост с корнем в директории
web/
этого проекта проекта (например так). - Подтягиваем зависимости композером:
composer install
- Разворачиваем приложенный дамп из файла
dump/basedump.sql
(например так). - Создаём копию
application/config/web-local-example.php
в той же папке с названиемapplication/config/web-local.php
и прописываем туда доступы к базе данных.
Открываем сайт в браузере. Удачной разработки!
На папку, в которую записываются JS-файлы ассетов, может потребоваться дать права, напр. сделать владельцем пользователя, под которым у вас работает php, например:
sudo chown www-data:www-data -R web/assets/
- для апача в убунту это часто пользователь
www-data
Используйте для авторизации:
- Логин:
admin
- Пароль:
admin
ВНИМАНИЕ: текстовая документация находится в процессе разработки, её содержимое может быть неполным, для лучшего понимания работы системы обратитесь к специальному разделу на сайте (там есть ссылки на видео).
- Введение
- Конфигурация приложения
- Маршрутизация
- Контроллеры
- Модели
- Представления
- Макеты (Layouts) представлений
- Авторизация и Конроль доступа. Работа с текущим пользователем
- Консольное приложение
- Система работы с JS и CSS и управления локальными зависимостями между файлами (Asset-ы)
- (черновик) Обработка исключений
Подключаем клсс для работы с даными конфига:
use ItForFree\SimpleMVC\Config;
Получение класса объекта (например, пользователя):
$User = Config::getObject('core.user.class');
получение элемента (без необъходимости инстанцировать класс с таким именем):
$User = Config::get('путь.в.массиве.конфига');
Получить доступ к объекту-синглтону можно так (через конфиг):
$User = Config::getObject('core.user.class');
Получить подробную инфромацию о том почему есть или нет доступа к какому-либо маршрутут для данного пользователя можно распечатав данные метода:
$User->explainAccess('/ваш/маршрут');
ItForFree\SimpleMVC\Router\WebRouter::link()
-- добавить вторым параметром список get-параметров, отличных от route
- Добавить типизацию везде, где только можно на ядро и приложение-пример
Что ещё надо улучшить/сделать (совсем универсальное выносим в rusphp остальное относится к ядру т.е. самому SimpleMVC
):
Новые замечания:
- Добавить интерфейс для контроллеров (имеет смысл, если переделать свойство получения пути к макету на метод).
Старые замечания:
- Добавить html-хэлпер (возм. с участием
rusphp
) - Несовершенный контроль доступа -- rules лучше сделать методом (чтобы, возможно, что-то вычислять динамически). Ввести пседонимы @ и ? для роли зарегистрированного пользователя и гостя.
- Сделать отдачу
404
в ответ на найденные контроллеры или их действия, аналогично подумать над передачей кодов для других ошибок (исключений SimpleMVC
) - Возможно, надо пересмотреть свзимоотношения трейта конторля доступа, контроллера и класса пользоватлея -- м.б. трейт надо вынуть из контроллера и сделать либо независимым либо перенести в класс пользователя.
- Проверить работу класса, управляющего сессией, на предмет блокировок и "в целом".
- Добавить класс (виджет) для работы с меню, который мог бы выставлять активный элемент, проверяя маршрут.
- Прикрутить миграции.
- Добавить виджет для "хлебных крошек".
- Создать отдельно класс модели и отдельно класс модели для работы с БД (наследющийся от 1-ого).
- Описать интерфейсы для всех классов приложения, перечисленных в конфиге.
- Сделать объекты конфигурабельными.
- Проверить возможность установки явного времени действия сессии (авторизация).
- Сделать обработку ситуации отсутствия доступа более "мягкой" (без вообще непрехватываемого исключения).
- Проверить в админке стили на страницах редактирования (заметок и пользователей).
- Добавить в админке возможность редактирования роли пользователя.
- Документация по bootstrap4: https://getbootstrap.com/docs/4.1/layout/overview/