{"id":20112427,"url":"https://github.com/andy87/yii2-app-advanced-soa","last_synced_at":"2025-10-07T20:11:00.873Z","repository":{"id":244315455,"uuid":"807120484","full_name":"andy87/yii2-app-advanced-soa","owner":"andy87","description":"self Yii 2.0 app on advanced template with service object architecture","archived":false,"fork":false,"pushed_at":"2025-01-04T12:59:45.000Z","size":2474,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-13T06:06:20.208Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andy87.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"open_collective":"yiisoft","tidelift":"packagist/yiisoft/yii2-app-advanced"}},"created_at":"2024-05-28T14:17:46.000Z","updated_at":"2024-12-15T21:47:01.000Z","dependencies_parsed_at":"2024-06-24T16:44:33.605Z","dependency_job_id":"1f0e6e30-70bc-421d-99b8-a1dfda819e5a","html_url":"https://github.com/andy87/yii2-app-advanced-soa","commit_stats":null,"previous_names":["andy87/yii2-app-advanced-soa"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fyii2-app-advanced-soa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fyii2-app-advanced-soa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fyii2-app-advanced-soa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fyii2-app-advanced-soa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andy87","download_url":"https://codeload.github.com/andy87/yii2-app-advanced-soa/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241556883,"owners_count":19981876,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-11-13T18:20:13.254Z","updated_at":"2025-10-07T20:11:00.867Z","avatar_url":"https://github.com/andy87.png","language":"PHP","funding_links":["https://opencollective.com/yiisoft","https://tidelift.com/funding/github/packagist/yiisoft/yii2-app-advanced"],"categories":[],"sub_categories":[],"readme":"\u003cspan style=\"text-align: center\"\u003e\n    \u003ca href=\"https://github.com/yiisoft\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://avatars0.githubusercontent.com/u/993323\" height=\"100px\" alt=\"logo\" /\u003e\n    \u003c/a\u003e\n    \u003ch1 style=\"text-align: center\"\u003eYii 2 Advanced Project Template\u003c/h1\u003e\n    \u003cbr\u003e\n\u003c/span\u003e\n\nYii 2 Advanced Project Template is a skeleton [Yii 2](https://www.yiiframework.com/) application best for\ndeveloping complex Web applications with multiple tiers.\n\nThe template includes three tiers: front end, back end, and console, each of which\nis a separate Yii application.\n\nThe template is designed to work in a team development environment. It supports\ndeploying the application in different environments.\n\nDocumentation is at [docs/guide/README.md](https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/README.md).\n\n[![Latest Stable Version](https://img.shields.io/packagist/v/yiisoft/yii2-app-advanced.svg)](https://packagist.org/packages/yiisoft/yii2-app-advanced)\n[![Total Downloads](https://img.shields.io/packagist/dt/yiisoft/yii2-app-advanced.svg)](https://packagist.org/packages/yiisoft/yii2-app-advanced)\n[![build](https://github.com/yiisoft/yii2-app-advanced/workflows/build/badge.svg)](https://github.com/yiisoft/yii2-app-advanced/actions?query=workflow%3Abuild)\n\n\n# Installation ([Yii2 guide](https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/start-installation.md#installation))\n\nconsole move to `root` directory application and run the following commands:\n```bash\ngit clone git@github.com:andy87/yii2-app-advanced-soa.git .\n\n# Install dependencies\ncomposer install\n\n# Change directory to `app`\ncd yii2\n\n# Initialize application\nphp init\n\n# Select Dev/Prod\n\n# Run migrations\nphp yii migrate\nphp yii_test migrate\n```\n### Codeception tests\n\nconsole move to `root/app` directory application and run the following commands:\n\n### Build codeception tests\n```bash\n./vendor/bin/codecept build\n```\n\n### Check the application with codeception tests ([Yii2 guide](https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/start-testing.md))\n```bash\n./vendor/bin/codecept run\n```\n\n# Информация\n\n___\nЯ люблю Yii2 за его простоту и функциональность, поэтому захотелось создать свою сборку шаблона приложения.  \n**Особенности этого шаблона**:\n - все файлы declare(strict_types=1)\n - nullable warning style\n - работает на PHP от 8 версии\n - имеет более расширенную структуру директорий и абстракцию\n - предустановленные пакеты(которыми приходится часто пользоваться).\n\n\n### Были добавлены следующие пакеты\n- [vlucas/phpdotenv](https://github.com/vlucas/phpdotenv) - для работы с переменными окружения  \n- [mihaildev/yii2-ckeditor](https://github.com/MihailDev/yii2-ckeditor?tab=readme-ov-file) - для работы с редактором текста  \n- [kartik-v/yii2-widget-select2](https://demos.krajee.com/widget-details/select2) - для работы с выпадающим списком    \n- [kartik-v/yii2-icons](https://demos.krajee.com/icons) - для работы с иконками  \n- [andy87/knockknock](https://github.com/andy87/knockknock) - для запросов\n- [andy87/yii2-migrate-architect](https://github.com/andy87/yii2-migrate-architect) - для работы с миграциями\n- [andy87/yii2-file-crafter](https://github.com/andy87/yii2-file-crafter) - для массовой генерации файлов\n- [andy87/lazy-load-trait](https://github.com/andy87/lazy-load-trait) - для отложено загрузки свойств(lazyLoad)\n  \n### Файлы\n - Вырезаны `bat` файлы.  \n - В `dev` окружение добавлен файл `yii2/reset` для удаления локальных файлов сгенерированных через команду `init`\n - Все тесты адаптированы под работу с `Service` и `Repository`\n - Всем основных классам добавлены родительские `abstract class`\n \n### Директории:\n- `yii2` - в корне проекта, содержит только части приложения Yii2.\n- `uploads` - в корне проекта, содержит загруженные файлы пользователей.\n\nВ директории приложения `yii2` добавлены, дочерние папки:\n#### Common\n- `common/components` - содержит компоненты, которые могут использоваться во всех частях приложения.\n- `common/services` - содержит сервисы, которые могут использоваться во всех частях приложения, а так же являются родителями для других сервисов.\n- `comman/handles` - содержит обработчики, родительские классы для обработчиков в директориях `console`, `backend` и `frontend`\n- `comman/producers` - содержит компонент, реализующий добавление данных в систему.\n- `common/repository` - содержит репозитории, которые могут использоваться во всех частях приложения, а так же являются родителями для других репозиториев.\n  - `common/models/sources` - содержит модели, которые были сгенерированы с помощью `gii`, а так же унаследованы от них \"боевые\" модели.\n  - `common/models/dto` - содержит модели, которые используются для передачи данных между сервисами.\n  - `common/models/forms` - содержит модели форм, которые используются для комбинирования данных, при обработке действия пользователя.\n\n#### Console\n- `console/services` - содержит сервисы, которые используются в `console` командах.\n- `console/producers` - содержит компонент, реализующий добавление данных в систему.\n- `console/repository` - содержит репозитории, которые используются в `console` сервисах.\n- `console/handlers` - содержит обработчики, в которых реализуется логика, используя методы `services` и `repository`.\n\n#### Backend\n- `backend/components` - содержит компоненты, которые используются в `backend` части приложения.\n- `backend/services` - содержит сервисы, которые используются в `backend` части приложения.\n- `backend/producers` - содержит компонент, реализующий добавление данных в систему.\n- `backend/repository` - содержит репозитории, которые используются в `backend` сервисах.\n- `backend/handlers` - содержит обработчики, в которых реализуется логика, используя методы `services` и `repository`.\n- `backend/resources` _(ViewModel)_ - содержит ресурсы, которые используются `backend/views`.\n\n#### Frontend\n- `frontend/components` - содержит компоненты, которые используются в `frontend` части приложения.\n- `frontend/services` - содержит сервисы, которые используются в `frontend` части приложения.\n- `frontend/producers` - содержит компонент, реализующий добавление данных в систему.\n- `frontend/repository` - содержит репозитории, которые используются в `frontend` сервисах.\n- `frontend/handlers` - содержит обработчики, в которых реализуется логика, используя методы `services` и `repository`.\n- `frontend/resources` _(ViewModel)_ - содержит ресурсы, которые используются `frontend/views`.\n\n\n### Init\nНемного изменён Init.\n1. создаёт файл `.env` из шаблона `.env.example`.\n2. проставляет права на папку `uploads`.\n3. генерирует файлы `.htaccess` для Apache сервера.\n\n\n## Gii Generator\n\n### EXAMPLE `frontend`\n* Model Class `yii2\\common\\models\\sources\\{Item}` \n* Search Model Class `yii2\\common\\models\\search\\{Item}Search`\n* Controller Class `yii2\\(backend|frontend)\\controllers\\sources\\{Item}Controller`\n* View Path `@(backend|frontend)/views/sources/{item}`\n\nDIRECTORY STRUCTURE\n-------------------\n\n```\nuploads/              +   содержит загруженные пользователем файлы\nyii2/                  +   содержит только части приложения Yii2\n    environments/         содержит переопределения на основе окружения\n\n    common/               окружение - общее\n        components/   +       содержит общие компоненты\n        config/               содержит общие конфигурации\n        fixterus/             содержит данные для фикстур\n        handlers/     +       содержит реализацию логики, используя методы `services` и `repository`.\n        mail/                 содержит аблоны электронных писем\n        models/               содержит классы моделей, используемые всеми окружениями\n            dto/      +           содержит модели DTO\n            forms/    +           содержит модели веб-форм\n            sources/  +           содержит модели, созданные gii и унаследованные от них модели, с кастомной логикой\n        producers/    +       содержит общие классы реализующие добавление данных в систему\n        repository/   +       содержит общие классы репозиториев\n        runtime/              содержит runtime сгенерированные файлы\n        services/     +       содержит общие классы сервисов\n        tests/                содержит общие тесты для общих классов\n        widget/               содержит общие классы виджетов\n\n    console/              окружение - консоль\n        config/               содержит конфигурации консоли\n        controllers/          содержит консольные контроллеры (команды)\n        handlers/    +        содержит реализацию логики, используя методы `services` и `repository`.\n        migrations/           содержит миграции базы данных\n        models/               содержит модели, специфичные для консоли\n        producers/   +        содержит классы реализующие добавление данных в систему\n        repository/  +        содержит классы репозиториев\n        runtime/              содержит runtime сгенерированные файлы\n        services/    +        содержит классы сервисов консоли\n\n    backend/              окружение - бэка(админка)\n        assets/               содержит ресурсы приложения, такие как JavaScript и CSS\n        components/  +        содержит компоненты для backend\n        config/               содержит конфигурации backend\n        controllers/          содержит веб-классы контроллеров\n        handlers/    +        содержит реализацию логики, используя методы `services` и `repository`.\n        models/               содержит модели, специфичные для backend\n        producers/   +        содержит классы реализующие добавление данных в систему\n        repository/  +        содержит классы репозиториев backend\n        resources/   +        содержит классы ресурсов backend\n        runtime/              содержит runtime сгенерированные файлы\n        services/    +        содержит классы сервисов backend\n        tests/                содержит тесты для backend приложения    \n        views/                содержит файлы представлений для веб-приложения\n        web/                  содержит скрипт входа и веб-ресурсы\n\n    frontend/             окружение - фронт(пользовательская часть)\n        assets/               содержит ресурсы приложения, такие как JavaScript и CSS\n        components/  +        содержит компоненты для frontend\n        config/               содержит конфигурации frontend\n        controllers/          содержит веб-классы контроллеров\n        handlers/    +        содержит реализацию логики, используя методы `services` и `repository`.\n        models/               содержит модели, специфичные для frontend\n        producers/   +        содержит классы реализующие добавление данных в систему\n        repository/  +        содержит классы репозиториев frontend\n        resources/   +        содержит классы ресурсов frontend\n        runtime/              содержит runtime сгенерированные файлы\n        services/    +        содержит классы сервисов frontend\n        tests/                содержит тесты для frontend приложения\n        views/                содержит файлы представлений для веб-приложения\n        web/                  содержит скрипт входа и веб-ресурсы\n        widgets/              содержит виджеты для frontend\n    \n```\n\n### Терминология именования методов.\nКак правило, имя метода должно начинаться с глагола, описывающего действие метода.\n- **getter** — Получить приватное свойство конкретного объекта\n- **setter** — задать приватное свойство конкретного объекта\n- **setup...** — задать публичное свойство объекта\n- **get** — получить данные исходя из какой-то логики\n- **set** — задать какое-то значение исходя из какой-то логики\n- **find...** — найти данные в базе\n- **construct/generate** — Получить экземпляр класса\n- **create/generate** — создать объект модели в runtime  \n- **add** — добавление новой записи в базу \n- **handler...** — обработчик события/формы/модели\n- **prepare...** — подготовить данные для дальнейшего использования\n- **send...** — отправка данных\n- **is...** — проверка на условия\n- **remove/delete** — удаление записи из базы\n- **filter...** — фильтрация данных\n- **sort...** — сортировка данных\n  ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandy87%2Fyii2-app-advanced-soa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandy87%2Fyii2-app-advanced-soa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandy87%2Fyii2-app-advanced-soa/lists"}