Skip to content

self Yii 2.0 app on advanced template with service object architecture

License

Notifications You must be signed in to change notification settings

andy87/yii2-app-advanced-soa

Repository files navigation

logo

Yii 2 Advanced Project Template


Yii 2 Advanced Project Template is a skeleton Yii 2 application best for developing complex Web applications with multiple tiers.

The template includes three tiers: front end, back end, and console, each of which is a separate Yii application.

The template is designed to work in a team development environment. It supports deploying the application in different environments.

Documentation is at docs/guide/README.md.

Latest Stable Version Total Downloads build

Installation (Yii2 guide)

console move to root directory application and run the following commands:

git clone git@github.com:andy87/yii2-app-advanced-soa.git .

# Install dependencies
composer install

# Change directory to `app`
cd yii2

# Initialize application
php init

// Select Dev/Prod

# Run migrations
php yii migrate
php yii_test migrate

Codeception tests

console move to root/app directory application and run the following commands:

Build codeception tests

./vendor/bin/codecept build

Check the application with codeception tests (Yii2 guide)

./vendor/bin/codecept run

Информация


Я люблю Yii2 за его простоту и функциональность, поэтому захотелось создать свою сборку шаблона приложения.
Особенности этого шаблона:

  • все файлы declare(strict_types=1)
  • nullable warning style
  • работает на PHP от 8 версии
  • имеет более расширенную структуру директорий и абстракцию
  • предустановленные пакеты(которыми приходится часто пользоваться).

Были добавлены следующие пакеты

Файлы

  • Вырезаны bat файлы.
  • В dev окружение добавлен файл yii2/reset для удаления локальных файлов сгенерированных через команду init
  • Все тесты адаптированы под работу с Service и Repository
  • Всем основных классам добавлены родительские abstract class

Директории:

  • yii2 - в корне проекта, содержит только части приложения Yii2.
  • uploads - в корне проекта, содержит загруженные файлы пользователей.

В директории приложения yii2 добавлены, дочерние папки:

Common

  • common/components - содержит компоненты, которые могут использоваться во всех частях приложения.
  • common/services - содержит сервисы, которые могут использоваться во всех частях приложения, а так же являются родителями для других сервисов.
  • common/repository - содержит репозитории, которые могут использоваться во всех частях приложения, а так же являются родителями для других репозиториев.
    • common/models/sources - содержит модели, которые были сгенерированы с помощью gii, а так же унаследованы от них "боевые" модели.
    • common/models/dto - содержит модели, которые используются для передачи данных между сервисами.
    • common/models/forms - содержит модели форм, которые используются для комбинирования данных, при обработке действия пользователя.

Console

  • console/services - содержит сервисы, которые используются в console командах.
  • console/repository - содержит репозитории, которые используются в console сервисах.

Backend

  • backend/components - содержит компоненты, которые используются в backend части приложения.
  • backend/services - содержит сервисы, которые используются в backend части приложения.
  • backend/repository - содержит репозитории, которые используются в backend сервисах.
  • backend/resources (ViewModel) - содержит ресурсы, которые используются backend/views.

Frontend

  • frontend/components - содержит компоненты, которые используются в frontend части приложения.
  • frontend/services - содержит сервисы, которые используются в frontend части приложения.
  • frontend/repository - содержит репозитории, которые используются в frontend сервисах.
  • frontend/resources (ViewModel) - содержит ресурсы, которые используются frontend/views.

Init

Немного изменён Init.

  1. создаёт файл .env из шаблона .env.example.
  2. проставляет права на папку uploads.
  3. генерирует файлы .htaccess для Apache сервера.

Gii Generator

EXAMPLE frontend

  • Model Class yii2\common\models\sources\{Item}
  • Search Model Class yii2\common\models\search\{Item}Search
  • Controller Class yii2\(backend|frontend)\controllers\sources\{Item}Controller
  • View Path @(backend|frontend)/views/sources/{item}

DIRECTORY STRUCTURE

uploads/              +   содержит загруженные пользователем файлы
yii2/                  +   содержит только части приложения Yii2
    environments/         содержит переопределения на основе окружения

    common/               окружение - общее
        components/   +       содержит общие компоненты
        config/               содержит общие конфигурации
        fixterus/             содержит данные для фикстур
        mail/                 содержит аблоны электронных писем
        models/               содержит классы моделей, используемые всеми окружениями
            dto/      +           содержит модели DTO
            forms/    +           содержит модели веб-форм
            sources/  +           содержит модели, созданные gii и унаследованные от них модели, с кастомной логикой
        repository/   +       содержит общие классы репозиториев
        runtime/              содержит runtime сгенерированные файлы
        services/     +       содержит общие классы сервисов
        tests/                содержит общие тесты для общих классов
        widget/               содержит общие классы виджетов

    console/              окружение - консоль
        config/               содержит конфигурации консоли
        controllers/          содержит консольные контроллеры (команды)
        migrations/           содержит миграции базы данных
        models/               содержит модели, специфичные для консоли
        repository/  +        содержит классы репозиториев
        runtime/              содержит runtime сгенерированные файлы
        services/    +        содержит классы сервисов консоли

    backend/              окружение - бэка(админка)
        assets/               содержит ресурсы приложения, такие как JavaScript и CSS
        components/  +        содержит компоненты для backend
        config/               содержит конфигурации backend
        controllers/          содержит веб-классы контроллеров
        models/               содержит модели, специфичные для backend
        repository/  +        содержит классы репозиториев backend
        resources/   +        содержит классы ресурсов backend
        runtime/              содержит runtime сгенерированные файлы
        services/    +        содержит классы сервисов backend
        tests/                содержит тесты для backend приложения    
        views/                содержит файлы представлений для веб-приложения
        web/                  содержит скрипт входа и веб-ресурсы

    frontend/             окружение - фронт(пользовательская часть)
        assets/               содержит ресурсы приложения, такие как JavaScript и CSS
        components/  +        содержит компоненты для frontend
        config/               содержит конфигурации frontend
        controllers/          содержит веб-классы контроллеров
        models/               содержит модели, специфичные для frontend
        repository/  +        содержит классы репозиториев frontend
        resources/   +        содержит классы ресурсов frontend
        runtime/              содержит runtime сгенерированные файлы
        services/    +        содержит классы сервисов frontend
        tests/                содержит тесты для frontend приложения
        views/                содержит файлы представлений для веб-приложения
        web/                  содержит скрипт входа и веб-ресурсы
        widgets/              содержит виджеты для frontend
    

Терминология именования методов.

Как правило, имя метода должно начинаться с глагола, описывающего действие метода.

  • getter — Получить приватное свойство конкретного объекта
  • setter — задать приватное свойство конкретного объекта
  • setup... — задать публичное свойство объекта
  • get — получить данные исходя из какой-то логики
  • set — задать какое-то значение исходя из какой-то логики
  • find... — найти данные в базе
  • construct/generate — Получить экземпляр класса
  • create/generate — создать объект модели в runtime
  • add — добавление новой записи в базу
  • handler... — обработчик события/формы/модели
  • prepare... — подготовить данные для дальнейшего использования
  • send... — отправка данных
  • is... — проверка на условия
  • remove/delete — удаление записи из базы
  • filter... — фильтрация данных
  • sort... — сортировка данных