brnbio/laravel-crud

自定义代码生成器

1.1.1 2023-12-24 07:56 UTC

This package is auto-updated.

Last update: 2024-09-24 09:28:30 UTC


README

此库帮助生成Laravel项目的代码。

安装

composer require --dev brnbio/laravel-crud

如果您想使用自己的模板,请确保将占位符发布到您的应用程序中。

php artisan stub:publish

可宏化

如果您想添加自己的替换项,可以轻松更新替换项。所有基本替换、命令参数和选项都可用。

// AppServiceProvider.php

GenerateRequestCommand::macro('updateReplace', function (array $replace, array $arguments, array $options) {
    return array_merge($replace, [
        // your replacements
    ]);
});

基本替换

  • {{ namespace }} - 生成类的命名空间
  • {{ rootNamespace }} - 基础命名空间
  • {{ class }} - 类名
  • {{ namespacedModel }} - 命名空间模型类
  • {{ model }} - 模型名称
  • {{ modelVariable }} - 模型变量名称
  • {{ modelVariablePlural }} - 模型复数变量名称
// e.g. for a Team model

$replace = [
    'namespace' => 'App\Models',
    'rootNamespace' => 'App',
    'class' => 'Team',
    'namespacedModel' => 'App\Models\Team',
    'model' => 'Team',
    'modelVariable' => 'team',
    'modelVariablePlural' => 'teams',
];

用法

为模型Team生成一切:模型、控制器、视图、请求和迁移。

php artisan generate --table=teams --attributes=name:string Team

如果您想手动操作,可以使用基本命令来生成。

生成模型

对于请求,除了基本替换外,还提供了以下替换:

  • {{ table }} - 表名(如果设置了选项)
  • {{ attributes }} - 属性常量列表
  • {{ fillable }} - 可填充属性列表
  • {{ properties }} - 基于属性的属性列表(用于文档块)
php artisan generate:model --table teams --attributes=name:string Team
// generated fields

/**
 * Class Team
 *
 * @package App\Models
 * @property string $name
 */
class Team extends Model
{
    public const TABLE = 'teams';
    public const ATTRIBUTE_NAME = 'name';

    /**
     * @var string[]
     */
    protected $fillable = [
        self::ATTRIBUTE_NAME,
    ];
}

生成迁移

对于请求,除了基本替换外,还提供了以下替换:

  • {{ fields }} - 基于属性的表字段列表
php artisan generate:migration --create teams --attributes=name:string CreateTeamsTable
// generated fields

Schema::create('teams', function (Blueprint $table) {
    // ...
    $table->string('name');
    // ...
});

生成控制器

对于请求,除了基本替换外,还提供了以下替换:

  • {{ storeRequest }} - 存储请求类
  • {{ namespacedStoreRequest }} - 命名空间存储请求类
  • {{ updateRequest }} - 更新请求类
  • {{ namespacedUpdateRequest }} - 命名空间更新请求类
php artisan generate:controller --model=Team --type=create Teams/CreateController
// generated controller

class CreateController extends Controller
{
    /**
     * @return Response
     */
    public function __invoke(): Response
    {
        return inertia('teams/create');
    }

    /**
     * @param StoreRequest $request
     * @return RedirectResponse
     */
    public function store(StoreRequest $request): RedirectResponse
    {
        $team = Team::create($request->validated());

        return to_route('teams.details', compact('team'));
    }
}

生成视图

php artisan generate:view --model Team --type create teams/create
// generated view

<script setup>

import { useForm } from '@inertiajs/inertia-vue3';
import { provide } from 'vue';

const form = useForm({
    //
});
provide('form');

function submit() {
    form.submit(route('teams.create'));
}

</script>
<template>

    <form @submit.prevent="submit">
        // ...
        <button :disabled="form.processing">
            Submit
        </button>
    </form>

</template>

生成请求

对于请求,除了基本替换外,还提供了以下替换:

  • {{ rules }} - 基于属性的规则列表
php artisan generate:request --model Team --attributes=name:string Teams/StoreRequest
// generated rules

public function rules(): array
{
    return [
        Team::ATTRIBUTE_NAME => [
            'required',
            'string',
            'max:255',
        ],
    ];
}