andy87 / yii2-dnk-generator
My workflow for `template path` pattern
Requires
- php: >=8.0
- yiisoft/yii2: *
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
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
-
Use
-
Profit
-
Setup
Description
Legend:
- S_P&M > == set
property&methodsin to - Env:
all== all environment ( common/console/backend/frontend ) - Env:
backend== environmentbackend - Env:
frontend== environmentfrontend
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 labelscommon/components/db/Setup.php- Data base config: CHARACTER, COLLATE, ENGINEcommon/components/db/Tables.php- class with table names used Part::CONSTANT_NAMEcommon/components/resources/GridViewResource.php- GridView Resources ( search, dataProvider )backend/components/controllers/BackendController.php- Base backend controller with common methodsfrontend/components/controllers/FrontendController.php- Base frontend controller with common methodscommon/components/resources/crud/CreateResource.php- common resource for view createcommon/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.phptemplate
- migration
-
common/models
-
common/services
- common-service
common/services/UserService.phptemplate
- common-service
-
backend/models
-
backend/services
- backend-service
backend/services/UserService.phptemplate
- backend-service
-
backend/resources
- backend-create-resource
backend/resources/user/UserCreateResource.phptemplate - backend-list-resource
backend/resources/user/UserListResource.phptemplate - backend-list-resource
backend/resources/user/UserReadResource.phptemplate - backend-update-resource
backend/resources/user/UserUpdateResource.phptemplate
- backend-create-resource
-
backend/controller
- backend-model-controller
backend/controller/cruds/UserController.phptemplate
- backend-model-controller
-
backend/views
- backend-views-form
backend/views/user/_form-user.phptemplate - backend-views-create
backend/views/user/user-create.phptemplate - backend-views-update
backend/views/user/user-update.phptemplate - backend-views-read
backend/views/user/user-read.phptemplate - backend-views-list
backend/views/user/user-list.phptemplate
- backend-views-form
-
frontend/models
-
frontend/service
- frontend-service
frontend/service/UserService.phptemplate
- frontend-service
-
frontend/resources
-
frontend/controllers
- frontend-model-controller
frontend/consrollers/UserController.phptemplate
- frontend-model-controller
-
frontend/views
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.phptemplatecommon/models/sources/UserSource.phptemplatefrontend/service/UserService.phptemplate
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
-
backend/models
-
frontend/models
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.phptemplate
- backend-model-controller
-
frontend/controllers
- frontend-model-controller
frontend/consrollers/UserController.phptemplate
- frontend-model-controller
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.phptemplate
- common-service
-
backend/services
- backend-service
backend/services/UserService.phptemplate
- backend-service
-
frontend/service
- frontend-service
frontend/service/UserService.phptemplate
- frontend-service
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/
-
backend/test/unit/
-
frontend/test/unit/
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.phptemplate
- common-service
-
backend/services
- backend-service
backend/services/UserService.phptemplate
- backend-service
-
frontend/service
- frontend-service
frontend/service/UserService.phptemplate
- frontend-service
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.phptemplate - backend-views-create
backend/views/user/user-create.phptemplate - backend-views-update
backend/views/user/user-update.phptemplate - backend-views-read
backend/views/user/user-read.phptemplate - backend-views-list
backend/views/user/user-list.phptemplate
- backend-views-form
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
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.
- exec command
composer require andy87/yii2-dnk-generator:dev-master
#OR
php composer.local require andy87/yii2-dnk-generator:dev-master
- 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/... commandparts- table lis. for user * in command propertybaseClasses- list of based class names for generated file
-
exec command dnk/setup
The generator supplies default base classes for Yii Advanced.
baseClassesis optional; individual entries can be overridden without repeating the rest. Empty or malformed class names are rejected before files are written. -
Update
configfor 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.
- Register each additional entity in
common\components\Entity. For example, thepostentity 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', ], ], ];
- Add the table to
common\components\db\Tables::NAMESbefore 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.