隨手搞個自用的代碼生成包laravel-generator

2021-03-02 php中文網最新課程

Laravel-generator 代碼生成包

Introduction

由於最近在做後臺,需要類似於Gii的代碼生成包,網上可能有比較豐富的包,不過沒怎麼去了解過,就根據自己習慣隨手寫了個方便自己使用的包,寫的比較匆忙所以代碼可能比較粗糙。目前只寫了後端的,前端有時間在寫。

1. 根據自定義框架目錄,修改*.stub生成自定義的初始代碼

2. 支持model + filter + request + resource + service + controller + migration + test

3. 自動讀取同名數據表並填充到 model + resource + migration 的欄位

Installation

composer require hogen\laravel-generator
php artisan vendor:publish --tag=generator

'providers' => [    ···    App\Console\Commands\Generator\GeneratorServiceProvider::class];

Run

## name : 必填,短橫式命名的資源名稱}## --module= : 必填,指定三級模塊(大小寫規範) 如:GasStation/MainCard/Balance## --prefix= : 指定二級前綴(大小寫規範) 默認:AdminApi## --baseDir= : 指定一級目錄(大小寫規範) 默認:Http## --force : 覆蓋已存在文件## --filter : 使用filter篩選類## --test : 生成測試文件例子:

* Path: App\Http\Controller\AdminApi\User\Example
php artisan admin:make-resource testExample --force --baseDir=Http --prefix=AdminApi --module=User\Example
* Path: App\Admin\Controller\User\Example
php artisan admin:make-resource testExample --force --filter

--baseDir=Admin  --module=User\Example

Deployment自定義配置

Generator\MakeResource.php

protected $types = [
'model', 'request', 'resource', 'service', 'controller', 'test', 'migration'];

目錄規則

protected $pathFormat = [
'model' => ['inBaseDir' => false, 'prefix' => ''],
'service' => ['inBaseDir' => false, 'prefix' => ''],
'test' => ['inBaseDir' => false, 'prefix' => true],
'request' => ['inBaseDir' => true, 'prefix' => true],
'resource' => ['inBaseDir' => true, 'prefix' => true],
'controller' => ['inBaseDir' => true, 'prefix' => true],
'migration' => ['inBaseDir' => false, 'prefix' => ''],];

Filter篩選器

protected $createFilter = false;protected $baseFilterHelperPath = "Models\Traits\Filter";

資料庫欄位填充






protected $resourceNoFillableFields = [
'update_time',
'updated_time',
'delete_time',
'deleted_time',];




protected $modelNoFillableFields = [
'id',
'create_time',
'created_time',
'update_time',
'updated_time',
'delete_time',
'deleted_time',];

Code Format 修改默認代碼格式

參考各stub配置自定義默認格式

以下stub為簡化後的代碼習慣,按需修改

Generator\stubs\*.stub

<?php
namespace DummyNamespace;
use NamespacedDummyModel;
use NamespacedDummyRequest;
use NamespacedDummyResource;
use NamespacedDummyService;
use BaseNamespaceResource\EmptyResource;
use BaseNamespaceController\Controller;
class DummyClass extends Controller{
public function index(DummyRequest $request){
$validated = $request->validated();
$dummyModels = DummyModel::query()
->filter($validated)
->orderByDesc('id')
->paginate();
return DummyResource::collection($dummyModels);
}
···
}

TODO

前端根據組件生成

相關焦點

  • OpenAPI Generator v4.1.1 發布,OpenAPI 規範自動生成代碼
    添加用於枚舉字符串轉換的類型轉換器 Dart  避免 Json 中的冗餘空籤 使客戶端跨平臺 管理可空定義Go  添加選項使用類作為枚舉前綴 確保表示枚舉值得常量唯一名稱 URLEncode 路徑參數 導入帶前導下劃線的 Go 包
  • php性能優化利器Generator生成器及yield
    生成器允許你在 foreach 代碼塊中寫代碼來迭代一組數據而不需要在內存中創建一個數組, 那會使你的內存達到上限,或者會佔據可觀的處理時間。相反,你可以寫一個生成器函數,就像一個普通的自定義函數一樣, 和普通函數隻返回一次不同的是, 生成器可以根據需要 yield 多次,以便生成需要迭代的值。
  • Python Yield Generator 詳解
    ,包括以下內容:什麼generator,生成generator的方法,generator的特點,generator基礎及高級應用場景,generator使用中的注意事項。從上面的代碼可以看出,gen_generator函數返回的是一個generator實例,generator有以下特別:下面看一下測試代碼:>>> def gen_example():...
  • Laravel學習:服務容器綁定與解析
    這是服務容器最簡單的使用,下面是對服務容器的詳細介紹laravel容器基本認識  一開始,index.php 文件加載 Composer 生成定義的自動加載器,然後從 bootstrap/app.php 腳本中檢索 Laravel 應用程式的實例。
  • 創建並運行一個新的 Laravel 項目
    使用 Laravel 安裝器安裝安裝 Laravel 安裝器很簡單,在命令行執行以下命令即可(如果已經安裝過,會自動進行更新):composer global require laravel/installer 安裝完成後,後續就可以通過 laravel new [項目名稱] 來創建新的 Laravel 項目了:laravel
  • Mybatis-Generator,讓你的懶體現到極致!
    下面就是基於整合SpringBoot及maven提供的Mybatis-Generation插件進項詳細的介紹,以下代碼只需稍微改動就能運行。--配置generator插件-->   <plugin>    <groupId>org.mybatis.generator</groupId>    <artifactId>mybatis-generator-maven-plugin</artifactId>    <version>1.3.5&
  • PHP(Laravel)用戶註冊、登錄和退出
    登陸、註冊成功後跳轉頁面登陸或者註冊後,都是跳轉到了/home這個頁面,但實際上,我根本不需要這麼個頁面。我們希望登陸或者註冊成功後,都跳轉到首頁。那麼可以到 AuthLoginController中,添加這樣的屬性//錯誤3次後protected$maxAttempts='3';//禁止登陸1個小時protected$decayMinutes='60';這時候如果你錯誤3次,就真的會讓你1個小時後再登錄了
  • VSCode的Laravel語法提示插件
    我對這個插件的特點在於支持config(), view()和 Laravel 的其他語法,這些語法通常在大多數編輯器中都沒有自動補全功能,但可以節省很多資料庫和代碼之間的時間上下文切換。如果Visual Studio Code不適合您,Blueprint 可能會通過從集中式配置文件生成各種文件來滿足這種自動完成的需求 。您還可以從同時使用 Blueprint 和 Laravel Intellisense 中受益,我只想指出,存在多種方法來管理文件的通用部分和應用程式數據周圍的代碼。
  • 兩步完成Generator逆向工程,自動生成MVC代碼
    2 創建資料庫及表新建一個數據,並創建一張表,通過逆向工程生成這張表對應的MVC三層代碼,創建數據表如下圖。3 第二步、通過Generator進行逆向工程設置逆向工程生成的包名,通過逆向主類可以設置作者名稱,如:人人都是程式設計師;設置database資料庫名;設置需要逆向表名,如user。
  • 3分鐘短文:Laravel ORM 模型用法綱要
    引言 前兩期為了說明laravel框架提供的資料庫操作能力,直接使用DB門面操作, 而沒有引入更為強大的eloquent orm功能。從本期開始,我們就分次把 eloquent的一些簡要知識點,為大家提煉演示一下。主要以代碼為主,配以簡要說明。
  • python之generator生成器模擬資料庫主鍵自增
    前言在Python中,可以使用列表生成式生成一個列表,但是列表生成式有一個缺點,就是如果要生成的列表中存在大量的元素而且又是按需使用的,顯然對內存空間來說是極大的浪費,那現在能不能有一種思路是這樣的:生成的列表中元素是可以按照某種算法推導
  • guns-lite 發布代碼生成工具 - OSCHINA - 中文開源技術交流社區
    guns-lite發布第一版代碼生成工具啦!
  • Python小白教程:生成器 (generator) 和迭代器 (iterator)
    my_nums = square([1, 2, 3, 4, 5])for num in my_nums: print(num)總結:生成器可以用生成函數 (generator function) 來定義,記住要用 yield 而不是 return。
  • Laravel-基礎「程式設計師培養之路第五十三天」
    Laravel是一款簡潔、優雅的PHP Web開發框架,它可以讓你從麵條一樣雜亂的代碼中解脫出來;它可以幫你構建一個完美的網絡APP,而且每行代碼都可以簡潔、富於表達力。laravel第一節 安裝官方手冊推薦我們使用Laravel Homstead虛擬機,我們可以著手去配置該虛擬機,若是初學者的話,建議先使用本地環境wamp即可。1.
  • 完結篇:91 個常見的 Laravel 面試題和答案(三)
    它也可以用於生成: 43) 您將如何檢查表是否在資料庫中存在?使用 Laravel 中的 hasTable () 函數檢查所需的表是否在資料庫中存在。 44) Laravel 中 insert () 和 insertGetId () 函數之間的顯著區別是什麼?
  • Laravel 自定義 SQL 查詢參數綁定
    引言 laravel使用模型進行資料庫操作時,並不是所有的欄位或者關聯關係 都能滿足查詢需求,有時候會有一些MySQL的函數計算等功能放在資料庫 層面執行。
  • 只需130 行代碼,用 GAN 生成二維樣本的小例子
    50行GAN代碼的問題Dev Nag 寫的 50 行代碼的 GAN,大概是網上流傳最廣的,關於GAN最簡單的小例子。這是一份用一維均勻樣本作為特徵空間(latent space)樣本,經過生成網絡變換後,生成高斯分布樣本的代碼。
  • laravel應用 之多個路由文件配置
    很多php開發者或者新近開發者,在一開始使用或學習laravel框架的時候,肯定會默認把所有的路由寫在 route/web.php中。然而這樣會有一個問題,就是那麼多的路由寫在這樣一個文件中,會顯得很多很冗雜,當然了小編一開始也是這樣寫的,不過經過多方查找和實驗,小編無意間看到 laravel 的路由還可以這樣配置。
  • 寫了10年的代碼,我最怕寫Mybatis這些配置,現在有詳解了
    還好, mybatis 為我們提供了強大的代碼生成--MybatisGenerator。通過簡單的配置, 我們就可以生成各種類型的實體類, Mapper接口, MapperXML文件, Example對象等。通過這些生成的文件, 我們就可以方便的進行單表進行增刪改查的操作。
  • 3分鐘短文|Laravel SQL篩選兩個日期之間的記錄,怎麼寫?
    引言今天說一個細分的需求,在模型中,或者使用laravel提供的 Eloquent ORM 功能,構造查詢語句時,返回位於兩個指定的日期之間的條目。應該怎麼寫?本文通過幾個例子,為大家梳理一下。然後調用模型的 where 查詢語句:$reservations = Reservation::where('reservation_from', $now)->get();上一條生成的SQL語句如下:select * from table_name