trd-rdm/make-unit-command

一个Laravel命令,帮助项目团队成员轻松创建路由的项目文件。

v1.1.6 2023-01-18 10:46 UTC

This package is auto-updated.

Last update: 2024-09-18 14:36:54 UTC


README

用法

php artisan make:unit User   // 範例1
php artisan make:unit Users/Admin  // 範例2

简介

一个Laravel单元make命令,可能帮助项目团队成员快速创建资源路由所需的文件。

1. 安装步骤

(1) 安装

打开命令提示符,在项目根目录路径下输入 composer require trd-rdm/make-unit-command --dev,确认安装成功后

(2) 注册 Service Provider

在项目根目录下找到 app/Providers/AppServiceProvider.php,找到 register() 函数。在函数中,仅当在本地端 (当APP_ENV = local) 时注册 UnitCommandServiceProvider,添加如下内容(斜体粗体部分)

public function register()  
{  
    if($this->app->isLocal()) {  
        $this->app->register(  
            \RDM\MakeUnitCommand\UnitCommandServiceProvider::class); 
    }  
}

说明:仅在本地端注册,以避免在 Google Cloud Platform 上构建机器时,由于无法连接到私有的GitLab仓库而导致构建过程出错。同时,在构建机器时建议使用 "composer install --no-dev" 安装,跳过安装 require-dev 中的开发阶段的包,以避免构建失败。

(3) 将套件文档复制到项目中

打开命令提示符,在项目根目录路径下输入 php artisan vendor:publish --tag=generator --force,将必要文件复制到项目中,如果没有显示错误,表示安装完成。不要忘记将这些文件 git add,push 到 server 上,让项目成员可以使用。

2. 使用说明

(1) 指令

用法类似于 Laravel 内置的 make:controller 指令。
打开命令提示符,在项目根目录路径下输入,在项目根目录下输入 php artisan make:unit Folder/User,表示在 Folder 文件夹下建立相关文件。

上述指令会
(1) 在 app/Http/Folder/Controller/User 下建立 Controller.php, Transform.php, Form.php
(2) 在 App/Management/Folder/User 下建立 Service.php, SearchService.php, Repository.php, Entity.php
(3) 在 api.php 下新增默认的资源路由如下

// TODO: 檢查 User 建立 Routes URI 是否正確
Route::get('user', 'Folder\User\Controller@index');
Route::post('user', 'Folder\User\Controller@store');
Route::put('user/{user}', 'Folder\User\Controller@update');
Route::delete('user/{user}', 'Folder\User\Controller@destroy');
  • 特别注意的是程序会自动检测重复的 URI 格式的 route 不会建立,例如若是 api.php 中已经有 Route::put('user/{id}, ...),为了避免路由覆盖的问题,Route::put('user/{user}', 'User\Controller@update') 将不会建立。

(2) 启用/停用建立文件

如果不希望在 api.php 下自动新增 resource routes,可以到 config/generator.php 下找到 **'route' 将 enable 改为 false**。同样,你也可以禁用 controller, entity 或是 search 文件的建立。

3. 更新步骤

指令

  1. composer update rdm/make-unit-command
  2. 在项目根目录路径下输入 php artisan vendor:publish --tag=generator --force 覆盖旧文件
  3. 将所有更改 git push

v1.1.0

2019-10-14
新增

  • 在 controller 添加 transformer 以及 Search 类别的声明
  • 添加检查输入参数首字母是否为大写的功能,若是小写会询问。

修改

  • 修正 command help 描述
  • 修改 shell 输出消息颜色

v1.1.1

2019-12-30
新增

  • 添加 Form::attributes() 以让程序人员可以自定义验证错误消息中的验证字段名称

修改

  • 修正改 Form::authorize() 中示例调用的权限函数配合新版 Basic_Project 从 BaseForm::permission(tag, value) 改成 BaseForm::can(value, tag) 以增加程序可读性
    并且 BaseForm::can() 支持闭包格式的调用

v1.1.2

2020-04-09
修改

  • 修正 MAC / Linux 环境下不支持反斜杠路径导致的创建文件问题

v1.1.5

2022-01-10
修改

  • 修正替换 Laravel 8 已弃用的 Str 辅助函数

Form 示例程序

Form.php

格式自由填写

<?php
use App\Rules\PositiveKey;

public function authorize(): bool
{
    switch ($this->method_name) {
        case "index":
            return $this->can('search', 'permission');
        case "update":
            return $this->can(['create', 'update'], 'permission');
        case "review":
            return $this->can(function($request) {...});
    }
}

public function rules(): array
{
    switch ($this->method_name) {
         case "store":
                $rules = [
                    "name"              =>  'required|string|min:1|max:45|unique:roles,name,NULL,id,deleted_at,NULL,portal,'.portal(),
                    "permission"        =>  ['present','array', new PositiveKey]
                ]
    }
    
    return $rules;
}

public fuction attributes(): array
{
    $all = ['name' => '帳號名稱'];
    switch ($this->method_name) {
         case "store":
            $alias = ['permission' => '權限值'];
    }
    
    return array_merge($all, $alias);
}
?>