定制 david-chamling/laravel-api-crud 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

david-chamling/laravel-api-crud

Composer 安装命令:

composer require david-chamling/laravel-api-crud

包简介

A complete Laravel API CRUD generator with model, controller, service, requests and resources scaffolding

README 文档

README

Laravel PHP GitHub Repo stars

A powerful Laravel package that generates complete CRUD API scaffolding with a single Artisan command.

🚀 Features

  • 🔧 Single-command CRUD scaffolding
  • 🧩 Built-in lifecycle hooks (before/after store/update)
  • 🚪 Custom route macros
  • 🔍 Advanced search and filtering
  • 📄 Pagination support
  • 🛡️ Request validation
  • 🎯 Resource transformation
  • 👤 Automatic user tracking (created_by / updated_by)
  • ⚙️ Customizable stubs

✅ Requirements

  • PHP >= 8.1
  • Laravel >= 9.x

📚 Learn by Example

Want to see it in action? Check out this step-by-step guide where we build a complete Blog API using this package:

👉 Read the full step-by-step tutorial on Medium

📦 Installation

Install via Composer:

composer require david-chamling/laravel-api-crud

(Optional) Publish stub files for customization:

php artisan vendor:publish --tag=crud-stubs

⚡ Basic Usage

Generate full CRUD scaffolding for a model:

php artisan make:crud Product

This will generate:

  • Controller
  • Service class
  • Form requests
  • API resource
  • Model
  • Migration
  • Routes

Define routes in your routes/api.php:

Route::crudResource('products', ProductController::class);

✅ Note: The crudResource() macro is automatically registered by the package.

🔒 Request Validation

For security and data integrity, you must define complete validation rules in your generated request classes.

⚠️ Important: This CRUD system only uses validated data. If you forget to define rules in your request classes, fields like name, price, etc., will be empty or missing from your controller — even if you pass them in the request.

Define validation rules in your generated request classes:

// StoreProductRequest.php

public function rules(): array
{
    return [
        'name' => 'required|string|max:255',
        'price' => 'required|numeric|min:0',
        'category_id' => 'required|exists:categories,id'
    ];
}

🧩 Model Configuration

Ensure your model’s $fillable property includes all the fields:

// Product.php

protected $fillable = [
    'name',
    'price',
    'category_id',
    // Add additional fields here
];

📘 Generated Endpoints

Method Endpoint Description
GET /products Paginated list
GET /products/all Get all records
GET /products/count Count total items
GET /products/{id} Get single record
POST /products Create new record
PUT /products/{id} Update record
DELETE /products/{id} Delete record
GET /products/featured Custom endpoint

🔍 Advanced Query Parameters

Customize search, filters, and pagination in your controller:

protected array $searchableColumns = ['name', 'description'];
protected array $searchableRelations = ['category' => ['name']];
protected int $paginationNumber = 15;

Examples:

GET /products?search=keyboard
GET /products?filter[status]=active
GET /products?sort_by=price&sort_order=desc
GET /products?with=category&fields=id,name
GET /products?per_page=20&page=2

🪝 Lifecycle Hooks

Override lifecycle hooks in your custom CRUD service:

public function beforeStore(array $data, Request $request): array
{
    $data['slug'] = Str::slug($data['name']);
    return $data;
}

public function afterStore(Model $model, Request $request): void
{
    // sending Notification, Sms, Creating logs, Storing into relational table
    // example:
    ActivityLog::create([
        'user_id' => $request->user()->id,
        'action' => 'store',
        'model_id' => $model->id,
        'changes' => $model->getChanges(),
    ]);

    if ($model->wasChanged('status')) {
        Notification::send(
            $model->assignedUsers,
            new StatusUpdatedNotification($model)
        );
    }
}

🔁 API Responses

Use the built-in response helper for consistency:

use DavidChamling\LaravelApiCrud\Utilities\ApiResponse;

return ApiResponse::success($data);         // 200 OK
return ApiResponse::created($newModel);     // 201 Created
return ApiResponse::error('Something went wrong'); // 400/500 Error
return ApiResponse::validationError($errors);      // 422 Unprocessable

🧱 Customization

After publishing stubs, you can customize all generated files:

stubs/crud-controller/
├── controller.stub
├── model.stub
├── service.stub
├── store-request.stub
├── update-request.stub
├── resource.stub

Modify these to fit your code style or architecture.

💡 Example Controller

use DavidChamling\LaravelApiCrud\Controllers\CrudController;
use DavidChamling\LaravelApiCrud\Utilities\ApiResponse;

class ProductController extends CrudController
{
    protected array $searchableColumns = ['name', 'sku'];
    protected array $searchableRelations = [
        'category' => ['name'],
        'manufacturer' => ['name'],
    ];

    public function __construct()
    {
        parent::__construct(
            model: Product::class,
            storeRequest: StoreProductRequest::class,
            updateRequest: UpdateProductRequest::class,
            simpleResource: ProductResource::class,
            detailedResource: ProductDetailResource::class,
            serviceClass: ProductCrudService::class
        );
    }

    public function featured()
    {
        $products = $this->model::featured()->get();
        return ApiResponse::success(ProductResource::collection($products));
    }
}

🛠️ Support

Having issues or suggestions? Open an issue on GitHub:

👉 GitHub Repository

📝 License

MIT Licensed. See LICENSE.

🤝 Contributing

Pull requests and suggestions are welcome! Feel free to open issues for bugs or enhancements.

david-chamling/laravel-api-crud 适用场景与选型建议

david-chamling/laravel-api-crud 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 37 次下载、GitHub Stars 达 11, 最近一次更新时间为 2025 年 05 月 27 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「generator」 「rest」 「api」 「controller」 「crud」 「laravel」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 david-chamling/laravel-api-crud 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 david-chamling/laravel-api-crud 我们能提供哪些服务?
定制开发 / 二次开发

基于 david-chamling/laravel-api-crud 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 37
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 12
  • 点击次数: 19
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 11
  • Watchers: 0
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-05-27