andy87/yii2-dnk-generator

我的`模板路径`模式工作流程

dev-master 2023-03-15 23:23 UTC

This package is auto-updated.

Last update: 2024-09-16 02:42:59 UTC


README

Yii2 advanced上的个人库,用于生成文件包,并遵循模板路径适配器和其他模式。

导航。

描述

图例

  • S_P&M > == 在property & methods中设置
  • Env:all == 所有环境(common/console/backend/frontend)
  • Env:backend == 环境代码backend
  • Env:frontend == 环境代码frontend

模型 & 表单。

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

服务。

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

控制器。

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

资源。

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

用法/示例。

命令

php yii dnk/setup `bool`

描述

生成文件

  • common/components/Entity.php - 带标签的服务部分
  • common/components/db/Setup.php - 数据库配置:CHARACTER, COLLATE, ENGINE
  • common/components/db/Tables.php - 使用Part::CONSTANT_NAME的表名类
  • common/components/resources/GridViewResource.php - GridView资源(搜索,数据提供者)
  • backend/components/controllers/BackendController.php - 带常用方法的基 backend 控制器
  • frontend/components/controllers/FrontendController.php - 带常用方法的基 frontend 控制器
  • common/components/resources/crud/CreateResource.php - 视图创建的通用资源
  • common/components/resources/crud/ListResource.php - 视图列表(index)的通用资源
  • common/components/resources/crud/ReadResource.php - 视图阅读(view)的通用资源
  • common/components/resources/crud/UpdateResource.php - 视图更新(update)的通用资源

命令

php yii dnk/run `string` `bool`

生成基本文件包

描述

  • console/migration

    • migration console/migration/m000000_000000_create_table__user.php 模板
  • common/models

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

    • common-service common/services/UserService.php 模板
  • backend/models

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

    • 后端服务 backend/services/UserService.php 模板
  • 后端资源

    • 创建资源 backend/resources/user/UserCreateResource.php 模板
    • 列表资源 backend/resources/user/UserListResource.php 模板
    • 列表资源 backend/resources/user/UserReadResource.php 模板
    • 更新资源 backend/resources/user/UserUpdateResource.php 模板
  • 后端控制器

    • 模型控制器 backend/controller/cruds/UserController.php 模板
  • 后端视图

    • 表单视图 backend/views/user/_form-user.php 模板
    • 创建视图 backend/views/user/user-create.php 模板
    • 更新视图 backend/views/user/user-update.php 模板
    • 读取视图 backend/views/user/user-read.php 模板
    • 列表视图 backend/views/user/user-list.php 模板
  • 前端模型

    • 模型项 frontend/models/items/User.php 模板
    • 模型表单 frontend/models/forms/UserForm.php 模板
    • 模型搜索 frontend/models/search/UserSearch.php 模板
  • 前端服务

    • 前端服务 frontend/service/UserService.php 模板
  • 前端资源

    • 列表资源 frontend/resources/user/UserListResource.php 模板
    • 读取资源 frontend/resources/user/UserReadResource.php 模板
  • 前端控制器

    • 模型控制器 frontend/consrollers/UserController.php 模板
  • 前端视图

    • 读取视图 frontend/views/user/user-read.php 模板
    • 列表视图 frontend/views/user/user-list.php 模板

命令

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

为选定的表(部分)生成 gii model

* - 从配置 parts 生成列表

示例

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

别名

php yii gii/model

命令

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

为选定的表(部分)生成 gii crud
* - 从配置 parts 生成列表

示例

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

别名 php yii gii/crud

命令

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

为针式表(部分)生成选定的文件类型(文件类型列表)

描述

一次性生成文件。
php yii dnk/list `string` `string` `bool`

* - 从配置 parts 生成列表

仅生成:common/services/UserService.php 模板

生成所选文件。
php yii dnk/list user common-services,common-model-source,frontend-service

生成文件列表

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

命令

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

为针式表(部分)生成model文件。

  • common/models

    • common-model-source common/models/sources/UserSource.php 模板
    • common-model-item common/models/items/User.php 模板
  • backend/models

    • backend-model-item backend/models/items/User.php 模板
    • backend-model-form backend/models/forms/UserForm.php 模板
  • 前端模型

    • 模型项 frontend/models/items/User.php 模板
    • 模型表单 frontend/models/forms/UserForm.php 模板

命令

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

为针式表(部分)生成controller文件。

  • 后端控制器

    • 模型控制器 backend/controller/cruds/UserController.php 模板
  • 前端控制器

    • 模型控制器 frontend/consrollers/UserController.php 模板

命令

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

为针式表(部分)生成service文件。

  • common/services

    • common-service common/services/UserService.php 模板
  • backend/services

    • 后端服务 backend/services/UserService.php 模板
  • 前端服务

    • 前端服务 frontend/service/UserService.php 模板

命令

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

为针式表(部分)生成test文件。

示例

php yii dnk/gen-tests user
  • common/test/unit/

    • 服务 common/tests/unit/services/UserServiceTest.php 模板
    • 项目 common/tests/unit/models/items/UserTest.php 模板
  • backend/test/unit/

    • 服务 backend/tests/unit/services/UserServiceTest.php 模板
    • 项目 backend/tests/unit/models/items/UserTest.php 模板
    • 表单 backend/tests/unit/models/items/UserFormTest.php 模板
  • frontend/test/unit/

    • 服务 frontend/tests/unit/services/UserServiceTest.php 模板
    • 项目 frontend/tests/unit/models/items/UserTest.php 模板
    • 表单 frontend/tests/unit/models/items/UserFormTest.php 模板

命令

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

为针式表(部分)生成service文件。

  • common/services

    • common-service common/services/UserService.php 模板
  • backend/services

    • 后端服务 backend/services/UserService.php 模板
  • 前端服务

    • 前端服务 frontend/service/UserService.php 模板

命令

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

为针式表(部分)生成views文件。

  • 后端视图
    • 表单视图 backend/views/user/_form-user.php 模板
    • 创建视图 backend/views/user/user-create.php 模板
    • 更新视图 backend/views/user/user-update.php 模板
    • 读取视图 backend/views/user/user-read.php 模板
    • 列表视图 backend/views/user/user-list.php 模板

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

命令

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

为针式表(部分)生成views文件。

  • 前端视图
    • 读取视图 frontend/views/user/user-read.php 模板
    • 列表视图 frontend/views/user/user-list.php 模板

别名

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

盈利。

服务盈利

模型User的示例

前端、后端和测试中创建的单个端点

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);
   }
}

资源盈利

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 设置

安装。

  1. 执行命令
composer require andy87/yii2-dnk-generator:dev-master
#OR
php composer.local require andy87/yii2-dnk-generator:dev-master

2. 更新配置文件

  • 高级:@console\config\main.php
//.. other code

return [
    // .. other config
    
    'controllerMap' => [
        // .. other config
        
        'dnk' => [  // new block
            'class'     => andy87\dnk\GenerateController::class
        ]
        
    ]
]
  • root - 包含 'frontend', 'backend', 'common' 等目录的目录
  • command - gii/... 命令的一部分
  • parts - 命令属性中用户 * 的表单列表
  • baseClasses - 生成文件的基类名称列表
  1. 执行命令 dnk/setup

  2. 更新config以满足您的需求,例如

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`
            ]
        ]
    ]
]
  1. 添加Entity
    类:common\components\Entity,添加 public const
/** @var int */ 
public const CAMEL_CASE = 2;
  1. 添加Tables
    类:common\components\db,更新 public const NAMES
/** @var int */ 
public const NAMES = [
    // other code ...
    Entity::CAMEL_CASE => 'snake_case',
];