СТРУКТУРА: app - конфигурация приложения, контроллеры приложения config - основная конфигурация database - данные для миграций и тестовые данные engine - ядро микрофрэймворка models - модели данных для Категорий(разделов) и Товаров public - директория веб-сервера с точкой входа
db - консольный скрипт создания/миграции/заполнения БД README.md - данный файл
ОКРУЖЕНИЕ: Apache MySQL >=5.6 PHP >=5.6
УСТАНОВКА:
- Клонируем проект в корневую директорию проекта на сервере (директория должна быть пустая): git clone https://github.com/evgkan/test_1.git .
- Apache должен быть натравлен на директорию public. 3.1 Создайте БД: выполните команду в консоли php db, выберите "1", введите пользователя mySql, пароль, название БД. Скрипт попытается создать БД и внесет изменения в файл настроек config/db.php. Если для изменения файла config/db.php недостаточно прав, внесите изменения самостоятельно. Для изменения настроек измените данный файл вручную. 3.2 Выполните миграцию БД выполните команду в консоли php db, выберите "2". На этом этапе создадутся таблицы. Схемы таблиц содержатся в файле database/migration.php 3.3 Заполните БД тестовыми данными: выполните команду php db, выберите "3". На этом этапе таблицы заполняются. Данные содеожатся в файле database/fakedata.php
- При ручной настройке конфигурации БД используется файл config/db.php.
- В корне проекта лежит дамп с тестовыми данными test_data.sql
КОНФИГУРАЦИЯ: Общий файл конфигурации находится здесь: config/main.php. В этот файл подтягивается локальная конфигурация БД из файла config/db.php. Это локальный конфигурационный файл, при его отсутствии создайте его из файла config/db.php.dist и заполните актуальными параметрами. Этот же файл меняется миграцией. На основной файл конфигурации накладывается файл конфигурации приложения app/config/main.php. В файл конфигурации приложения пордтягивается конфигурация роутов: app/config/routes.php.
РАБОТА С ПРОЕКТОМ: При текущих настройках роутинга есть следующие API методы:
-
api/get-product-by-id принимает обязательный GET-параметр id пример: http://test1/api/get-product-by-id?id=1
-
api/get-products-by-name-substring принимает обязательный GET-параметр substr пример: http://test1/api/get-products-by-name-substring?substr=rod
-
api/get-products-by-makers принимает обязательный GET-параметр makers (массив|строка) примеры: http://test1/api/get-products-by-makers?makers=maker1 http://test1/api/get-products-by-makers?makers[]=maker1&makers[]=maker2
-
api/get-products-by-category принимает обязательный GET-параметр id (id категории) пример: http://test1/api/get-products-by-category?id=1
-
api/get-products-by-category-rec принимает обязательный GET-параметр id (id родительской категории) пример: http://test1/api/get-products-by-category-rec?id=1
Формат ошибочного ответа: {"status":"error", "message":"GET param 'id' is not found"}
Формат успешного ответа : { "status":"ok","result": [ {"id":"1","name":"product1","instock":"1","cost":"100","maker":"maker1"}, {"id":"2","name":"product2","instock":"1","cost":"101","maker":"maker1"}, {"id":"3","name":"product3","instock":"0","cost":"102","maker":"maker2"} ] }
Примечания
- Нет полноценной обработки ошибок
- Не достаточная защита от sql-инъекция списочных входных данных(массивов) - слишком трудоемко