PHPackages                             andy87/yii2-dnk-generator - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. andy87/yii2-dnk-generator

ActiveLibrary

andy87/yii2-dnk-generator
=========================

My workflow for `template path` pattern

063PHP

Since Mar 15Pushed 3y ago1 watchersCompare

[ Source](https://github.com/andy87/yii2-dnk-generator)[ Packagist](https://packagist.org/packages/andy87/yii2-dnk-generator)[ RSS](/packages/andy87-yii2-dnk-generator/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

DNK
===

[](#dnk)

Personal library on `Yii2 advanced` for generate files pack and follow pattern: `template path`, `adapter` and other.

### Navigation.

[](#navigation)

- ### [Description](#description)

    [](#description)

    - [Models &amp; Forms](#description-models-forms)
    - [Services](#description-services)
    - [Controllers](#description-controllers)
    - [Resources](#description-resources)
- ### [Use](#usage-examples)

    [](#use)

    - [dnk/setup](#command-setup)
    - [dnk/run](#command-run)
    - [dnk/gii-model](#command-gii-model)
    - [dnk/gii-crud](#command-gii-crud)
    - [dnk/list](#command-list)
    - [dnk/gen-models](#command-gen-models)
    - [dnk/gen-controllers](#command-gen-controllers)
    - [dnk/gen-services](#command-gen-services)
    - [dnk/gen-tests](#command-gen-tests)
    - [dnk/gen-backend-views](#command-gen-backend-views)
    - [dnk/gen-backend-views](#command-gen-backend-views)
    - [dnk/gen-frontend-views](#command-gen-frontend-views)
- ### Profit

    [](#profit)

    - [Service](#profit-services)
    - [Resource](#profit-resources)
- ### [Setup](#setup)

    [](#setup)

    - [composer](#setup-composer)
    - [config](#setup-config)

Description
-----------

[](#description-1)

Legend:

- S\_P&amp;M &gt; == set `property` &amp; `methods` in to
- Env:`all` == all environment ( common/console/backend/frontend )
- Env:`backend` == environment `backend`
- Env:`frontend` == environment `frontend`

### Models &amp; Forms.

[](#models--forms)

```
📄 common/components/core/BaseModel.php            // S_P&M > all children models on Env:`all`
|
└─📄 common/models/sources/__Model__Source.php     // model generated by `gii`, S_P&M > all children models on Env:all
  |
  ├─📄 common/models/items/__Model__.php           // S_P&M > models by part `__model__` on Env:`all`
  |  |
  | ├─📄 backend/models/items/__Model__.php        // S_P&M > `model` by part `__model__` on Env:`backend`
  | | └─📄 backend/models/forms/__Model__Form.php  // S_P&M > `form` on model `backend/models/items/__Model__` on Env:`backend`
  | |
  | └─📄 frontend/models/items/__Model__.php       // S_P&M > `model` by part `__model__` on Env:`frontend`
  |   └─📄 frontend/models/forms/__Model__Form.php // S_P&M > `form` on model `frontend/models/items/__Model__` on Env:`frontend`
  |
  └─📄 common/models/search/__Model__Search.php      // model for generated by `gii`, S_P&M > all search children models on Env:all
    ├─📄 backend/models/search/__Model__Search.php   // S_P&M > `search model` by part `__model__` on Env:`backend`
    └─📄 frontend/models/search/__Model__Search.php  // S_P&M > `search model` by part `__model__` on Env:`frontend`

```

### Services.

[](#services)

```
📄 common/components/core/BaseService.php              // S_P&M > all services on Env:`all`
|
├─📄 backend/components/services/__Model__Service.php  // S_P&M > services by part `__Model__` on Env:`backend`
|
└─📄 frontend/components/services/__Model__Service.php // S_P&M > services by part `__Model__` on Env:`frontend`

```

### Controllers.

[](#controllers)

```
📄 common/components/core/BaseController.php                 // S_P&M > all controllers on Env:`all`
|
├─📄 backend/components/controllers/BackendController.php    // S_P&M > all controllers on Env:`backend`
| └─📄 backend/components/controllers/CrudController.php     // S_P&M > all controllers generated with `crud` on Env:`backend`
|   └─📄 backend/controllers/crud/__Model__Controller.php    // S_P&M > generated `crud` controllers for moled `__Model__` on Env:`backend`
|
└─📄 frontend/components/controllers/FrontendController.php  // S_P&M > all controllers on Env:`frontend`
  └─📄 frontend/controllers/__Model__Controller.php          // S_P&M > controllers for moled `__Model__` on Env:`frontend`

```

### Resources.

[](#resources)

```
📄 common/components/core/BaseResource.php                         // S_P&M > all resources on Env:`all`
|
├─📄 backend/components/core/resources/BackendResource.php         // S_P&M > all resources on Env:`backend`
| |
| ├─📄 backend/components/resources/CrudListResource.php          // S_P&M > all resources for view `index` on Env:`backend`
| | └─📄 backend/resources/__model__/__Model__ListResource.php    // S_P&M > resources for moled `__Model__` on view `index` Env:`backend`
| |
| ├─📄 backend/components/resources/CrudReadResource.php           // S_P&M > all resources for view `view` on Env:`backend`
| | └─📄 backend/resources/__model__/__Model__ReadResource.php     // S_P&M > resources for moled `__Model__` on view `read` Env:`backend`
| |
| └─📄 backend/components/resources/CrudUpdateResource.php         // S_P&M > all resources for view `update` on Env:`backend`
|   └─📄 backend/resources/__model__/__Model__UpdateResource.php   // S_P&M > resources for moled `__Model__` on view `update` Env:`backend`
|
└─📄 frontend/components/core/resources/FrontendResource.php       // S_P&M > all resources on Env:`frontend`
  |
  ├─📄 frontend/resources/ReadResource.php                         // S_P&M > all resources for view `view` on Env:`frontend`
  | └─📄 frontend/resources/__model__/__Model__ReadResource.php    // S_P&M > resources for moled `__Model__` on view `read` Env:`frontend`
  |
  └─📄 frontend/resources/ListResource                             // S_P&M > all resources for view `list` on `frontend` environment
    └─📄 frontend/resources/__model__/__Model__ListResource.php    // S_P&M > resources for moled `__Model__` on view `list` Env:`frontend`

```

Usage/Examples.
---------------

[](#usageexamples)

### command

[](#command)

```
php yii dnk/setup `bool`
```

ParameterTypeDescription`overwrite``bool`**optional**. overwrite exists file. defaulkt: `false`#### description

[](#description-2)

Generate files:

- `common/components/Entity.php` - service parts with labels
- `common/components/db/Setup.php` - Data base config: CHARACTER, COLLATE, ENGINE
- `common/components/db/Tables.php` - class with table names used Part::CONSTANT\_NAME
- `common/components/resources/GridViewResource.php` - GridView Resources ( search, dataProvider )
- `backend/components/controllers/BackendController.php` - Base backend controller with common methods
- `frontend/components/controllers/FrontendController.php` - Base frontend controller with common methods
- `common/components/resources/crud/CreateResource.php` - common resource for view create
- `common/components/resources/crud/ListResource.php` - common resource for view list(index)
- `common/components/resources/crud/ReadResource.php` - common resource for view read(view)
- `common/components/resources/crud/UpdateResource.php` - common resource for view update

---

### command

[](#command-1)

```
php yii dnk/run `string` `bool`
```

ParameterTypeDescription`entity``string`**Required**. model/table to work with
 \* for use list fron property `parts``overwrite``bool`**optional**. overwrite exists file. default: `false`generate basic file pack:

#### description

[](#description-3)

- **console/migration**

    - migration `console/migration/m000000_000000_create_table__user.php` [template](src/templates/console/migrations/migration.tpl)
- **common/models**

    - common-model-source `common/models/sources/UserSource.php` [template](src/templates/common/models/sources/common-model-source.tpl)
    - common-model-item `common/models/items/User.php` [template](src/templates/common/models/items/common-model-item.tpl)
    - common-model-search `common/models/search/UserSearch.php` [template](src/templates/common/models/search/common-model-search.tpl)
- **common/services**

    - common-service `common/services/UserService.php` [template](src/templates/common/services/common-service.tpl)
- **backend/models**

    - backend-model-item `backend/models/items/User.php` [template](src/templates/backend/models/items/backend-model-item.tpl)
    - backend-model-form `backend/models/forms/UserForm.php` [template](src/templates/backend/models/forms/backend-model-form.tpl)
    - backend-model-search `backend/models/search/UserSearch.php` [template](src/templates/backend/models/search/backend-model-search.tpl)
- **backend/services**

    - backend-service `backend/services/UserService.php` [template](src/templates/backend/services/backend-service.tpl)
- **backend/resources**

    - backend-create-resource `backend/resources/user/UserCreateResource.php` [template](src/templates/backend/resources/model/backend-create-resource.tpl)
    - backend-list-resource `backend/resources/user/UserListResource.php` [template](src/templates/backend/resources/model/backend-list-resource.tpl)
    - backend-list-resource `backend/resources/user/UserReadResource.php` [template](src/templates/backend/resources/model/backend-list-resource.tpl)
    - backend-update-resource `backend/resources/user/UserUpdateResource.php` [template](src/templates/backend/resources/model/backend-update-resource.tpl)
- **backend/controller**

    - backend-model-controller `backend/controller/cruds/UserController.php` [template](src/templates/backend/controllers/cruds/backend-model-controller.tpl)
- **backend/views**

    - backend-views-form `backend/views/user/_form-user.php` [template](src/templates/backend/views/model/_form-model.tpl)
    - backend-views-create `backend/views/user/user-create.php` [template](src/templates/backend/views/model/model-create.tpl)
    - backend-views-update `backend/views/user/user-update.php` [template](src/templates/backend/views/model/model-update.tpl)
    - backend-views-read `backend/views/user/user-read.php` [template](src/templates/backend/views/model/model-read.tpl)
    - backend-views-list `backend/views/user/user-list.php` [template](src/templates/backend/views/model/model-list.tpl)
- **frontend/models**

    - frontend-model-item `frontend/models/items/User.php` [template](src/templates/frontend/models/items/frontend-model-item.tpl)
    - frontend-model-form `frontend/models/forms/UserForm.php` [template](src/templates/frontend/models/forms/frontend-model-form.tpl)
    - frontend-model-search `frontend/models/search/UserSearch.php` [template](src/templates/frontend/models/search/frontend-model-search.tpl)
- **frontend/service**

    - frontend-service `frontend/service/UserService.php` [template](src/templates/frontend/services/frontend-service.tpl)
- **frontend/resources**

    - frontend-list-resource `frontend/resources/user/UserListResource.php` [template](src/templates/frontend/resources/model/frontend-list-resource.tpl)
    - frontend-read-resource`frontend/resources/user/UserReadResource.php` [template](src/templates/frontend/resources/model/frontend-read-resource.tpl)
- **frontend/controllers**

    - frontend-model-controller `frontend/consrollers/UserController.php` [template](src/templates/frontend/controllers/frontend-model-controller.tpl)
- **frontend/views**

    - frontend-views-read `frontend/views/user/user-read.php` [template](src/templates/frontend/views/model/model-read.tpl)
    - frontend-views-list `frontend/views/user/user-list.php` [template](src/templates/frontend/views/model/model-list.tpl)

---

### command

[](#command-2)

```
php yii dnk/gii-model `string` `bool`
```

ParameterTypeDescription`entity``string`**Required**. model/table to work with
 \* for use list fron property `parts``overwrite``bool`**optional**. overwrite exists file. default: `false`Generate gii `model` for select table(part).

\* - generate list from config `parts`

#### Examples

[](#examples)

```
php yii dnk/gii-model user
php yii dnk/gii-model *
```

alias

```
php yii gii/model
```

---

### command

[](#command-3)

```
php yii dnk/gii-crud `string` `bool`
```

ParameterTypeDescription`entiry``string`**Required**. model/table to work with
 \* for use list fron property `parts``overwrite``bool`**optional**. overwrite exists file. default: `false`Generate gii `crud` for select table(part).
\* - generate list from config `parts`

#### Examples

[](#examples-1)

```
php yii dnk/gii-crud user
php yii dnk/gii-crud *
```

alias `php yii gii/crud`

---

### command

[](#command-4)

```
php yii dnk/list `string` `string` `bool`
```

ParameterTypeDescription`entiry``string`**Required**. model/table to work with
 \* for use list fron property `parts``map``string`**Required**. list of files to generate`overwrite``bool`**optional**. overwrite exists file. default: `false`Generate selected fileType(list fileType) for needle table(part).

#### description

[](#description-4)

##### Generate once file.

[](#generate-once-file)

```
php yii dnk/list `string` `string` `bool`
```

ParameterTypeDescription`entiry``string`**Required**. model/table to work with
 \* for use list fron property `parts``map``string`**Required**. map of file types`overwrite``bool`**optional**. overwrite exists file. default: `false`\* - generate list from config `parts`

generate only: `common/services/UserService.php` [template](src/templates/common/services/common-service.tpl)

##### Generate selected files.

[](#generate-selected-files)

```
php yii dnk/list user common-services,common-model-source,frontend-service
```

generate file list:

- `common/services/UserService.php` [template](src/templates/common/services/common-service.tpl)
- `common/models/sources/UserSource.php` [template](src/templates/common/models/sources/common-model-source.tpl)
- `frontend/service/UserService.php` [template](src/templates/frontend/services/frontend-service.tpl)

---

### command

[](#command-5)

```
php yii dnk/gen-models `string` `bool`
```

ParameterTypeDescription`entiry``string`**Required**. model/table to work with
 \* for use list fron property `parts``overwrite``bool`**optional**. overwrite exists file. default: `false`Generate `model` files for needle table(part).

- **common/models**

    - common-model-source `common/models/sources/UserSource.php` [template](src/templates/common/models/sources/common-model-source.tpl)
    - common-model-item `common/models/items/User.php` [template](src/templates/common/models/items/common-model-item.tpl)
- **backend/models**

    - backend-model-item `backend/models/items/User.php` [template](src/templates/backend/models/items/backend-model-item.tpl)
    - backend-model-form `backend/models/forms/UserForm.php` [template](src/templates/backend/models/forms/backend-model-form.tpl)
- **frontend/models**

    - frontend-model-item `frontend/models/items/User.php` [template](src/templates/frontend/models/items/frontend-model-item.tpl)
    - frontend-model-form `frontend/models/forms/UserForm.php` [template](src/templates/frontend/models/forms/frontend-model-form.tpl)

---

### command

[](#command-6)

```
php yii dnk/gen-controllers `string` `bool`
```

ParameterTypeDescription`entiry``string`**Required**. model/table to work with
 \* for use list fron property `parts``overwrite``bool`**optional**. overwrite exists file. default: `false`Generate `controller` files for needle table(part).

- **backend/controller**

    - backend-model-controller `backend/controller/cruds/UserController.php` [template](src/templates/backend/controllers/cruds/backend-model-controller.tpl)
- **frontend/controllers**

    - frontend-model-controller `frontend/consrollers/UserController.php` [template](src/templates/frontend/controllers/frontend-model-controller.tpl)

---

### command

[](#command-7)

```
php yii dnk/gen-services `string` `bool`
```

ParameterTypeDescription`entiry``string`**Required**. model/table to work with
 \* for use list fron property `parts``overwrite``bool`**optional**. overwrite exists file. default: `false`Generate `service` files for needle table(part).

- **common/services**

    - common-service `common/services/UserService.php` [template](src/templates/common/services/common-service.tpl)
- **backend/services**

    - backend-service `backend/services/UserService.php` [template](src/templates/backend/services/backend-service.tpl)
- **frontend/service**

    - frontend-service `frontend/service/UserService.php` [template](src/templates/frontend/services/frontend-service.tpl)

---

### command

[](#command-8)

```
php yii dnk/gen-tests `string` `bool`
```

ParameterTypeDescription`entiry``string`**Required**. model/table to work with
 \* for use list fron property `parts``overwrite``bool`**optional**. overwrite exists file. default: `false`Generate `test` files for needle table(part).

Example:

```
php yii dnk/gen-tests user
```

- **common/test/unit/**

    - service `common/tests/unit/services/UserServiceTest.php` [template](src/templates/common/tests/unit/services/common-test-unit-service.tpl)
    - item `common/tests/unit/models/items/UserTest.php` [template](src/templates/common/tests/unit/models/items/common-test-unit-model-item.tpl)
- **backend/test/unit/**

    - service `backend/tests/unit/services/UserServiceTest.php` [template](src/templates/backend/tests/unit/services/backend-test-unit-service.tpl)
    - item `backend/tests/unit/models/items/UserTest.php` [template](src/templates/backend/tests/unit/models/items/backend-test-unit-model-item.tpl)
    - form `backend/tests/unit/models/items/UserFormTest.php` [template](src/templates/backend/tests/unit/models/forms/backend-test-unit-model-form.tpl)
- **frontend/test/unit/**

    - service `frontend/tests/unit/services/UserServiceTest.php` [template](src/templates/frontend/tests/unit/services/frontend-test-unit-service.tpl)
    - item `frontend/tests/unit/models/items/UserTest.php` [template](src/templates/frontend/tests/unit/models/items/frontend-test-unit-model-item.tpl)
    - form `frontend/tests/unit/models/items/UserFormTest.php` [template](src/templates/frontend/tests/unit/models/forms/frontend-test-unit-model-form.tpl)

---

### command

[](#command-9)

```
php yii dnk/gen-backend-service `string` `bool`
```

ParameterTypeDescription`entiry``string`**Required**. model/table to work with
 \* for use list fron property `parts``overwrite``bool`**optional**. overwrite exists file. default: `false`Generate `service` files for needle table(part).

- **common/services**

    - common-service `common/services/UserService.php` [template](src/templates/common/services/common-service.tpl)
- **backend/services**

    - backend-service `backend/services/UserService.php` [template](src/templates/backend/services/backend-service.tpl)
- **frontend/service**

    - frontend-service `frontend/service/UserService.php` [template](src/templates/frontend/services/frontend-service.tpl)

---

### command

[](#command-10)

```
php yii dnk/gen-backend-views `string` `bool`
```

ParameterTypeDescription`entiry``string`**Required**. model/table to work with
 \* for use list fron property `parts``overwrite``bool`**optional**. overwrite exists file. default: `false`Generate `views` files for needle table(part).

- **backend/views**
    - backend-views-form `backend/views/user/_form-user.php` [template](src/templates/backend/views/model/_form-model.tpl)
    - backend-views-create `backend/views/user/user-create.php` [template](src/templates/backend/views/model/model-create.tpl)
    - backend-views-update `backend/views/user/user-update.php` [template](src/templates/backend/views/model/model-update.tpl)
    - backend-views-read `backend/views/user/user-read.php` [template](src/templates/backend/views/model/model-read.tpl)
    - backend-views-list `backend/views/user/user-list.php` [template](src/templates/backend/views/model/model-list.tpl)

alias `php yii dnk/list user backend-views-form,backend-views-create,backend-views-update,backend-views-read,backend-views-list`

---

### command

[](#command-11)

```
php yii dnk/gen-frontend-views `string` `bool`
```

ParameterTypeDescription`entiry``string`**Required**. model/table to work with
 \* for use list fron property `parts``overwrite``bool`**optional**. overwrite exists file. default: `false`Generate `views` files for needle table(part).

- **frontend/views**
    - frontend-views-read `frontend/views/user/user-read.php` [template](src/templates/frontend/views/model/model-read.tpl)
    - frontend-views-list `frontend/views/user/user-list.php` [template](src/templates/frontend/views/model/model-list.tpl)

alias

```
php yii dnk/list user frontend-views-read,frontend-views-list
```

---

Profit.
=======

[](#profit-1)

Service profit
--------------

[](#service-profit)

### Example for model `User`

[](#example-for-model-user)

once endpoint for creating on frontend, backend &amp; tests

```
common/UserService::create(UserForm $userForm);

backend/controllers/UserController {
   action create {
      if ($this->request->isPost)
      {
         (new backend/UserService())->create($this->request->post());
      }
   }
}

frontend/controllers/UserController {
   action create {
      if ($this->request->isPost)
      {
         (new frontend/UserService())->create($this->request->post());
      }
   }
}

frontend/controllers/api/v1/UserController {
   action create {
      if ($this->request->isPost)
      {
         (new frontend/UserService())->create($this->request->post());
      }
   }
}

// Test for all controllers...

tests/unit/user/CreateTest {
   test{
      $userForm = new UserForm();
      (new common/UserService())->create($userForm);
   }
}

```

Resource Profit
---------------

[](#resource-profit)

```
example:
frontend/resources/user/UsereViewProfileResources {
   public const TEMPLATE = 'user-view-profile';

   pub string $display_name;
   pub string $age;

   __construct($user) {
      $this->display_name = $user->name;
      $this->age = $user->age;
      // ... other code
   }
}

frontend/controllers/UserController {
   action viewProfile(int $id) {
      $user = new (UserService())->findByID($id);
      $R = new UsereViewProfileResources($user);

      return $R->content();
   }
}

frontend/controllers/api/v1/UserController {
   action viewProfile(int $id) {
      $user = new (UserService())->findByID($id);
      $R = new UsereViewProfileResources($user);

      return $R->json();
   }
}

frontend/views/user/user-view-profile:

Profile:
Age:

```

---

Yii2 setups
-----------

[](#yii2-setups)

### Install.

[](#install)

1. exec command

```
composer require andy87/yii2-dnk-generator:dev-master
#OR
php composer.local require andy87/yii2-dnk-generator:dev-master
```

2. Update config file:

- advanced: `@console\config\main.php`

```
//.. other code

return [
    // .. other config

    'controllerMap' => [
        // .. other config

        'dnk' => [  // new block
            'class'     => andy87\dnk\GenerateController::class
        ]

    ]
]
```

- `root` - directory with folders 'frontend',backend',common' ...
- `command` - part of gii/... command
- `parts` - table lis. for user \* in command property
- `baseClasses` - list of based class names for generated file

3. exec command [dnk/setup](#command-setup)
4. Update `config` for you require, by example:

```
use common\components\db\Tables;
use common\components\core\BaseModel;
use andy87\dnk\GenerateController;
use andy87\dnk\source\base\BaseController;
use andy87\dnk\source\base\BaseMigration;
use andy87\dnk\source\base\BaseResource;
use andy87\dnk\source\base\BaseService;

//.. other code

return [
    // .. other config

    'controllerMap' => [
        // .. other config

        'dnk' => [  // new block
            'class'     => GenerateController::class,
            'command'   => [
                GenerateController::COMMAND_MODEL => implode(' ', [
                    '--modelClass={{CamelCase}}Source',
                    '--ns=common\\models\\sources',
                    '--tableName={{snake_case}}',
                    '--baseClass={{BaseModelClassName}}',
                    '&& yes'
                ]),
                GenerateController::COMMAND_CRUD => implode(' ', [
                    '--modelClass={{CamelCase}}',
                    '--controllerNamespace=backend\\controllers\\crud',
                    '--baseControllerClass=backend\\controllers\\cruds\\{{CamelCase}}Controller',
                    '--viewPath=@backend\\views\\cruds\\{{snake_case}}',
                    '--enableI18N=1',
                    '&& yes'
                ])
            ],
            'entityList' => array_values(Tables::DATA),
            'baseClasses' => [
                GenerateController::BASE_MIGRATE_CLASS => BaseMigration::class, // extends for `Migrations`
                GenerateController::BASE_CONTROLLER_CLASS => BaseController::class, // extends for `Controllers`
                GenerateController::BASE_MODEL_CLASS => BaseModel::class, // extends for `Source` models
                GenerateController::BASE_SERVICE_CLASS => BaseService::class, // extends for `Services`
                GenerateController::BASE_RESOURCE_CLASS => BaseResource::class, // extends for `Resources`
            ]
        ]
    ]
]
```

5. Add `Entity`
    Class: `common\components\Entity`, add `public const`

```
/** @var int */
public const CAMEL_CASE = 2;
```

6. Add `Tables`
    Class: `common\components\db`, update `public const NAMES`

```
/** @var int */
public const NAMES = [
    // other code ...
    Entity::CAMEL_CASE => 'snake_case',
];
```

###  Health Score

15

—

LowBetter than 3% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity22

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/548115774b8d117de69e58a5c7759f93d4cfcb37251e4eda2a41f46da85497b0?d=identicon)[andy87](/maintainers/andy87)

---

Top Contributors

[![andy87](https://avatars.githubusercontent.com/u/4658489?v=4)](https://github.com/andy87 "andy87 (191 commits)")

### Embed Badge

![Health badge](/badges/andy87-yii2-dnk-generator/health.svg)

```
[![Health](https://phpackages.com/badges/andy87-yii2-dnk-generator/health.svg)](https://phpackages.com/packages/andy87-yii2-dnk-generator)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
