Search by

andy87 / yii2-dnk-generator

andy87

My workflow for `template path` pattern

Package info

github.com/andy87/yii2-dnk-generator

pkg:composer/andy87/yii2-dnk-generator

Statistics

Installs: 64

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-master 2026-10-29 14:09 UTC

This package is auto-updated.

Last update: 2026-10-29 16:55:15 UTC


README

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

Navigation.

Description

Legend:

  • S_P&M > == set property & methods in to
  • Env:all == all environment ( common/console/backend/frontend )
  • Env:backend == environment backend
  • Env:frontend == environment frontend

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.

📄 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.

📄 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.

📄 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.

command

php yii dnk/setup `bool`
Parameter Type Description
overwrite bool optional. overwrite exists file. defaulkt: false

description

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

php yii dnk/run `string` `bool`
Parameter Type Description
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

  • console/migration

    • migration console/migration/m000000_000000_create_table__user.php template
  • common/models

    • common-model-source common/models/sources/UserSource.php template
    • common-model-item common/models/items/User.php template
    • common-model-search common/models/search/UserSearch.php template
  • common/services

    • common-service common/services/UserService.php template
  • backend/models

    • backend-model-item backend/models/items/User.php template
    • backend-model-form backend/models/forms/UserForm.php template
    • backend-model-search backend/models/search/UserSearch.php template
  • backend/services

    • backend-service backend/services/UserService.php template
  • backend/resources

    • backend-create-resource backend/resources/user/UserCreateResource.php template
    • backend-list-resource backend/resources/user/UserListResource.php template
    • backend-list-resource backend/resources/user/UserReadResource.php template
    • backend-update-resource backend/resources/user/UserUpdateResource.php template
  • backend/controller

    • backend-model-controller backend/controller/cruds/UserController.php template
  • backend/views

    • backend-views-form backend/views/user/_form-user.php template
    • backend-views-create backend/views/user/user-create.php template
    • backend-views-update backend/views/user/user-update.php template
    • backend-views-read backend/views/user/user-read.php template
    • backend-views-list backend/views/user/user-list.php template
  • frontend/models

    • frontend-model-item frontend/models/items/User.php template
    • frontend-model-form frontend/models/forms/UserForm.php template
    • frontend-model-search frontend/models/search/UserSearch.php template
  • frontend/service

    • frontend-service frontend/service/UserService.php template
  • frontend/resources

    • frontend-list-resource frontend/resources/user/UserListResource.php template
    • frontend-read-resourcefrontend/resources/user/UserReadResource.php template
  • frontend/controllers

    • frontend-model-controller frontend/consrollers/UserController.php template
  • frontend/views

    • frontend-views-read frontend/views/user/user-read.php template
    • frontend-views-list frontend/views/user/user-list.php template

command

php yii dnk/gii-model `string`
Parameter Type Description
entity string Required. model/table to work with
* for use list fron property parts

Generate gii model for select table(part).

Configure Gii's --interactive and --overwrite options in command; these are not positional arguments of dnk/gii-model. A failed child command stops the batch and its nonzero exit code is returned by DNK.

* - generate list from config parts

Examples

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

alias

php yii gii/model

command

php yii dnk/gii-crud `string`
Parameter Type Description
entiry string Required. model/table to work with
* for use list fron property parts

Generate gii crud for select table(part).
Gii options, including --overwrite, belong in command. DNK returns the child command's exit code and stops the batch on failure. * - generate list from config parts

Examples

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

alias php yii gii/crud

command

php yii dnk/list `string` `string` `bool`
Parameter Type Description
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

Generate once file.
php yii dnk/list `string` `string` `bool`
Parameter Type Description
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

Generate selected files.
php yii dnk/list user common-services,common-model-source,frontend-service

generate file list:

  • common/services/UserService.php template
  • common/models/sources/UserSource.php template
  • frontend/service/UserService.php template

command

php yii dnk/gen-models `string` `bool`
Parameter Type Description
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
    • common-model-item common/models/items/User.php template
  • backend/models

    • backend-model-item backend/models/items/User.php template
    • backend-model-form backend/models/forms/UserForm.php template
  • frontend/models

    • frontend-model-item frontend/models/items/User.php template
    • frontend-model-form frontend/models/forms/UserForm.php template

command

php yii dnk/gen-controllers `string` `bool`
Parameter Type Description
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
  • frontend/controllers

    • frontend-model-controller frontend/consrollers/UserController.php template

command

php yii dnk/gen-services `string` `bool`
Parameter Type Description
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
  • backend/services

    • backend-service backend/services/UserService.php template
  • frontend/service

    • frontend-service frontend/service/UserService.php template

command

php yii dnk/gen-tests `string` `bool`
Parameter Type Description
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
    • item common/tests/unit/models/items/UserTest.php template
  • backend/test/unit/

    • service backend/tests/unit/services/UserServiceTest.php template
    • item backend/tests/unit/models/items/UserTest.php template
    • form backend/tests/unit/models/items/UserFormTest.php template
  • frontend/test/unit/

    • service frontend/tests/unit/services/UserServiceTest.php template
    • item frontend/tests/unit/models/items/UserTest.php template
    • form frontend/tests/unit/models/items/UserFormTest.php template

command

php yii dnk/gen-backend-service `string` `bool`
Parameter Type Description
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
  • backend/services

    • backend-service backend/services/UserService.php template
  • frontend/service

    • frontend-service frontend/service/UserService.php template

command

php yii dnk/gen-backend-views `string` `bool`
Parameter Type Description
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
    • backend-views-create backend/views/user/user-create.php template
    • backend-views-update backend/views/user/user-update.php template
    • backend-views-read backend/views/user/user-read.php template
    • backend-views-list backend/views/user/user-list.php template

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

command

php yii dnk/gen-frontend-views `string` `bool`
Parameter Type Description
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
    • frontend-views-list frontend/views/user/user-list.php template

alias

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

Profit.

Service profit

Example for model User

once endpoint for creating on frontend, backend & 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);
   }
}

Public frontend JSON fields

Inherited FrontendController::actionList() and actionRead() accept type=json. Their items expose only id by default. Explicitly approve additional public fields in the application controller:

public const JSON_FIELDS = ['id', 'name'];

The list also respects the model's fields() definitions. An empty JSON_FIELDS returns no item attributes. Keep passwords, authentication keys and internal fields out of this list; newly added database columns are not exposed automatically. The response envelopes remain items/totalCount and item.

Generated searches query the item model of their own application side through the MODEL constant. Conditions configured in that model's find() method are preserved by both search filters and BaseService::findWhere(), which adds its criteria with andWhere(). This also applies when the criteria array is empty.

Generated backend controllers deny access until the application explicitly sets accessRoles. Guests are always denied. In the generated entity controller, declare the roles or permissions managed by the application's Yii authManager:

public array $accessRoles = ['manageUsers'];

Assign the corresponding RBAC permission or role to the intended users. An empty list grants no access; ['@'] explicitly grants all authenticated users and should only be used when that is the intended application policy. Frontend controllers remain public. Existing applications must apply the updated backend base template while preserving their custom code; updating the package alone does not replace it.

Backend creation preserves the form's selected validation scenario, including one set by a resource mutation. BaseService::createInScenario($params, $scenario, $is_save) delegates to the existing create(array $params, bool $is_save) method, so application overrides remain active. The scenario applies only to that call; ordinary create() calls keep the scenario selected by their own form factory.

The generated backend form renders the model's safe scalar attributes in its current scenario, including scalar virtual fields, instead of assuming name, description or status_id columns. Auto-increment columns and columns with SQL-expression defaults are omitted from the default form. Creation forwards only initialized safe columns and safe virtual values so omitted database defaults remain effective. Array/object values require application-specific widgets and are omitted from the default text inputs. Customize the generated inputs for such fields.

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:
<?php

use frontend/resources/user/UsereViewProfileResources;
 
/** @var UsereViewProfileResources $R - autocomplete and there is no possibility to make a typo */

?>

<div>Profile: <?= $R->display_name ?></div> 
<div>Age: <?= $R->age ?></div>

Yii2 setups

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
  1. exec command dnk/setup

    The generator supplies default base classes for Yii Advanced. baseClasses is optional; individual entries can be overridden without repeating the rest. Empty or malformed class names are rejected before files are written.

  2. 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=' . escapeshellarg('common\\models\\sources'),
                    '--tableName={{snake_case}}',
                    '--baseClass=' . escapeshellarg('{{BaseModelClassName}}'),
                    '--interactive=0',
                    '--overwrite=1'
                ]),
                GenerateController::COMMAND_CRUD => implode(' ', [
                    '--modelClass=' . escapeshellarg('backend\\models\\items\\{{CamelCase}}'),
                    '--controllerClass=' . escapeshellarg('backend\\controllers\\{{CamelCase}}CrudController'),
                    '--baseControllerClass=' . escapeshellarg('yii\\web\\Controller'),
                    '--viewPath=' . escapeshellarg('@backend/views/{{kebab-case}}-crud'),
                    '--enableI18N=1',
                    '--interactive=0',
                    '--overwrite=0'
                ])
            ],
            'entityList' => array_values(Tables::NAMES),
            '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`
            ]
        ]
    ]
]

The model command replaces generated source models (--overwrite=1). Keep custom behavior in the item/form classes. The CRUD command creates a separate standard Gii {{CamelCase}}CrudController in backend/controllers/ and preserves existing files (--overwrite=0). The {{kebab-case}} marker matches Yii controller IDs: user_profile produces views in backend/views/user-profile-crud/. Its base is yii\web\Controller: standard Gii actions have different return signatures from DNK's controllers. Use shell-escaped namespace arguments as shown above on both Windows and Unix. Gii must be installed and enabled in the application's console configuration.

  1. Register each additional entity in common\components\Entity. For example, the post entity uses a unique constant and display labels. Add these entries to the existing class; preserve the other entities:
public const POST = 2;

public const DATA = [
    // Keep existing entries, including USER.
    self::POST => [
        self::TABLE_NAME => Tables::NAMES[self::POST],
        self::LABELS => [
            self::NAME_MANY => 'Posts',
            self::NAME_ONE => 'Post',
        ],
    ],
];
  1. Add the table to common\components\db\Tables::NAMES before running migrations or opening the generated pages:
public const NAMES = [
    // Keep existing entries.
    Entity::POST => 'post',
];

When display labels are omitted, pages and migration comments use the registered table name. Labels in Entity::DATA take precedence. An unknown entity without either a label or a registered table raises an explicit configuration error.