{"id":21110157,"url":"https://github.com/algrvvv/equinox","last_synced_at":"2026-01-22T18:43:49.521Z","repository":{"id":214748693,"uuid":"732483325","full_name":"algrvvv/equinox","owner":"algrvvv","description":"PHP Framework","archived":false,"fork":false,"pushed_at":"2024-09-30T08:41:52.000Z","size":207,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-13T05:35:36.616Z","etag":null,"topics":["composer","docker","framework","git","mysql","nginx","npm","php","php-fpm","postgresql","tailwindcss"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/algrvvv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-12-16T20:28:18.000Z","updated_at":"2024-09-30T08:41:55.000Z","dependencies_parsed_at":"2024-01-28T12:31:40.805Z","dependency_job_id":"0abed2d6-a98e-41b7-9430-45467b69cbd4","html_url":"https://github.com/algrvvv/equinox","commit_stats":null,"previous_names":["algrvvv/equinox"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/algrvvv/equinox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/algrvvv%2Fequinox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/algrvvv%2Fequinox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/algrvvv%2Fequinox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/algrvvv%2Fequinox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/algrvvv","download_url":"https://codeload.github.com/algrvvv/equinox/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/algrvvv%2Fequinox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28668280,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T17:07:18.858Z","status":"ssl_error","status_checked_at":"2026-01-22T17:05:02.040Z","response_time":144,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["composer","docker","framework","git","mysql","nginx","npm","php","php-fpm","postgresql","tailwindcss"],"created_at":"2024-11-20T00:58:23.569Z","updated_at":"2026-01-22T18:43:49.504Z","avatar_url":"https://github.com/algrvvv.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\r\n\u003cimg style=\"width: 400px; display: flex; margin: 0 auto; justify-content: center; align-items: center;\" src=\"https://i.pinimg.com/originals/2c/d1/08/2cd108ddb22b2068aa00d3b4c864986d.png\"\u003e\r\n\u003c/p\u003e\r\n\u003cp align=\"center\"\u003e\r\n    \u003ca style=\"margin: 3px\"\u003e \r\n        \u003cimg src=\"https://img.shields.io/badge/Framework%20-6A4BE5\" style=\"max-width: 100%;\"\u003e\r\n    \u003c/a\u003e\r\n    \u003ca style=\"margin: 3px\"\u003e\r\n        \u003cimg src=\"https://img.shields.io/badge/Equinox-v1.6.14-blue\" style=\"max-width: 100%;\"\u003e\r\n    \u003c/a\u003e\r\n    \u003ca style=\"margin: 3px\"\u003e \r\n        \u003cimg src=\"https://img.shields.io/badge/PHP%20-8A2BE2\" style=\"max-width: 100%;\"\u003e\r\n    \u003c/a\u003e\r\n\u003c/p\u003e\r\n\r\n# Equinox - PHP Framework\r\n\r\nEquinox - PHP Framework, который разработан в целях обучения и понимания работы, как PHP, так и всей веб-разработки.\r\nПолная инструкция по установке и работе с данным фреймворком вы найдете в репозитории этого проекта.\r\nПроект будет обновляться и всегда ждет ваших предложений и исправлений!\r\n\r\n## Установка\r\n\r\n### Первый способ (докер):\r\n\r\n```bash\r\n#клонирование проекта\r\ngit clone https://github.com/algrvvv/equinox.git\r\ncd equinox\r\n#создайте и по надобности измените .env файл\r\ncp .env.example .env\r\n```\r\n\r\n```dotenv\r\nDB_DRIVER=mysql / pgsql\r\nDB_HOST=equinox_mysql / equinox_pgsql\r\nDB_PORT=3306 / 5432\r\nDB_NAME=db_equinox\r\nDB_USERNAME=root / postgres\r\nDB_PASSWORD=root / postgres\r\n```\r\n\r\n```bash\r\n#перейдите в директорию с установщиком\r\ncd _docker/setup\r\n#запустите его в рут правами\r\n./docker-setup.sh\r\n```\r\n\r\nПосле этого можете перейти по адресу http://localhost:8876/, где \r\nбудет находиться ваш сервер\r\n\r\n### Второй способ (без докера)\r\n\r\n```bash\r\n#клонирование проекта\r\ngit clone https://github.com/algrvvv/equinox.git\r\ncd equinox\r\ncp .env.example .env\r\n#установка composer и всех зависимостей\r\ncomposer install\r\n#установка npm\r\nnpm install\r\n```\r\nСкопируйте и переименуйте файл `.env.example` в `.env`.\r\nПосле этого измените данные для подключения в нем на свои:\r\n\r\n```dotenv\r\nDB_DRIVER=db_driver\r\nDB_HOST=db_host\r\nDB_PORT=db_port\r\nDB_NAME=db_name\r\nDB_USERNAME=db_user\r\nDB_PASSWORD=db_password\r\n```\r\n\r\nДля подключения `sqlite` используйте одну строчку: \r\n\r\n```dotenv\r\nDB_DRIVER=sqlite\r\n```\r\nБудет автоматически создана бд `app/database/database.sqlite`.\r\n\r\nПосле подключения базы данных напишите в терминале в корне проекта:\r\n\r\n```bash\r\n#для переноса всех миграций\r\nphp master migrate\r\n```\r\n\r\nВключите отображение стилей `tailwind`:\r\n\r\n```bash\r\n#подключение стилей tailwind\r\nnpx tailwindcss -i ./public/assets/style.css -o ./public/dist/style.css --watch\r\n#-\u003e                |  путь к вашим стилям |     | путь к ново созданном стилям |\r\n# ! подключать нужно созданные стили tailwind !\r\n```\r\n\r\n## Маршрутизация\r\n\r\nСоздание нового маршрута происходит в `routes/web.php`. Пример подобного роута:\r\n\r\n```php\r\n#пример маршрута\r\nRoute::get('/', [HomeController::class, 'index']);\r\n```\r\n\r\nКласс `Route` поддерживает `get`, `post`, `put`, `patch`, `delete` методы, а также\r\nметод `middleware`.\r\n\r\n\r\n## Отображение\r\n\r\nОбязательно храните данные для отображения в папке `views/`, а так же\r\nфайл должен иметь в расширение `.view.php`. Если вы положили такой файл\r\nк примеру в `views/pages/page.view.php`, то в момент вызова данного представления\r\nнужно указать такой путь: `pages/page`. И он будет успешно загружен.\r\n\r\n#### @include\r\n\r\nТак же, есть возможность загружать одни компоненты внутри других.\r\nДля этого используйте в своем `.view.php`:\r\n```php\r\n#указать существующее название отображения\r\n@include('pages/page')\r\n```\r\n\r\n## Master\r\n\r\nMaster - это небольшая **вспомогательная утилита**, которая\r\nсоздаст вам файлы миграций, моделей и контроллеров.\r\n\r\nА также она сможет перенести эти самые миграции в вашу\r\nранее подключенную базу данных.\r\n\r\nПример по ее использованию:\r\n```bash\r\n#чтобы увидеть все возможные команды\r\nphp master --help\r\n\r\n#чтобы создать новый файл миграций вместе с моделью (из-за флага -m)\r\nphp master create:migration users -m\r\n\r\n#чтобы сделать перенос миграция\r\nphp master migrate\r\n```\r\n\r\n## Контроллеры\r\n\r\n```bash\r\n#создание контроллера\r\nphp master create:controller name\r\n```\r\n\r\nКонтроллер служит для привязки к конкретному маршруту,\r\nа также для его обработки. Всеми известная модель MVC.\r\n\r\n## Миграции\r\n\r\n```bash\r\n#создание миграции (флаг -m и для создания модели)\r\n#про модели читать пункт `Модели и работа с бд`\r\nphp master create:migration name\r\n```\r\n\r\nМиграции относятся к разряду файлов, которые отвечают\r\nза работу с базой данных.\r\n\r\nМиграции нужны для более удобного создания нужной таблицы.\r\n\r\n\u003e ОЧЕНЬ ВАЖНО!\r\n\r\nВажно отметить, что на данный момент они поддерживают\r\nработу с MySQL, Sqlite, PostgreSQL, но в следующих обновлениях планируется\r\nдобавить поддержку MongoDB, MariaDB и др.\r\n\r\n\u003e Название миграций генерирует в начале дополнительные\r\n\u003e символы и цифры, чтобы избежать возможных конфликтов.\r\n\u003e А уже после само название миграции.\r\n\r\nВ миграции `users` уже есть пример того, какие поля и какие\r\nвозможности есть у миграций.\r\n\r\nТипы данных, которые доступны при работе с миграциями:\r\n\r\n```php\r\n# MySQL, Sqlite, PostgreSQL\r\n$this-\u003etable-\u003estring('field')-\u003eunique();\r\n$this-\u003etable-\u003einteger('field');\r\n$this-\u003etable-\u003efloat('field');\r\n$this-\u003etable-\u003etext('field')-\u003edefault('test message');\r\n$this-\u003etable-\u003edate('field');\r\n$this-\u003etable-\u003etimestamps();\r\n\r\n# MySQL, Sqlite\r\n$this-\u003etable-\u003eid();\r\n\r\n# PostgreSQL\r\n$this-\u003etable-\u003ebigserial();\r\n$this-\u003etable-\u003ehstore('field');\r\n$this-\u003etable-\u003ejsonb('field');\r\n```\r\n\r\nПосле создания и редактирования всех миграций, чтобы они\r\nбыли записаны в базу данных нужно вызвать \r\nутилиту \u003ca href=\"#master\"\u003emaster\u003c/a\u003e.\r\n\r\n```bash\r\nphp master migrate\r\n```\r\n\r\nЕсли все правильно, то в консоли вы увидите \r\nсоответствующее сообщение, а в базе данных нужные таблицы\r\n\r\n## Модели и работа с базами данных\r\n\r\n```bash\r\n#создание миграции и модели одновременно\r\nphp master create:migration name -m\r\n\r\n#отдельное создание модели\r\nphp master create:model name\r\n```\r\n\r\nДля начала нужно изменить данные подключения в `.env`, как \r\nбыло показано в \u003ca href=\"#Установка\"\u003eсамом начале\u003c/a\u003e.\r\n\r\nПосле этого вам понадобиться модель, которая будет иметь в себе нужные поля:\r\n```php\r\n#пример с моделью User\r\npublic string $login = '';\r\npublic string $email = '';\r\n#и тд\r\n```\r\n\r\nТакже обязательным яв-ся функция `rules()`, которая нужна\r\nдля дальнейшей обработки и валидации данных. Функция должна\r\nвозвращать ассоциативный массив с правилами. \r\n\r\nКакие существуют правила?\r\n```\r\nrequired   -\u003e поле обязательное\r\nemail      -\u003e поле должно быть типа email\r\nunique     -\u003e поле должно быть уникальным (по бд)\r\n[min =\u003e x] -\u003e минимальное кол-во символов, где x - кол-во символов\r\n[max =\u003e x] -\u003e аналогично min, но для максимального кол-ва символов\r\n```\r\n\r\nВ функции `tableName()` нужно оставить название свое таблицы,\r\nк которой привязана модель.\r\n\r\n```php\r\nprotected function tableName(): string\r\n{\r\n    return 'users';\r\n}\r\n```\r\n\r\nПосле правильной настройки в нужном методе нашего контроллера\r\nсоздаем новый экземпляр модели.\r\n\r\n```php\r\n$user = new User();\r\n\r\n#пример выборки из бд\r\n$user-\u003eselect('login')-\u003ewhere(['id' =\u003e 3])-\u003eget();\r\n```\r\n\r\n\u003e При установке проекта уже будут созданы\r\n`LoginController` и `RegisterController` по пути\r\n`app/controllers/` - контроллеры, в которых\r\n\u003e можно посмотреть примеры работы с моделью.\r\n\r\n## А что дальше?\r\n\r\nТворите! И конечно, жду вашего фидбека. \r\nВсе пожелания, недочеты и исправления.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falgrvvv%2Fequinox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falgrvvv%2Fequinox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falgrvvv%2Fequinox/lists"}