alxarafe/resource-controller
Composer 安装命令:
composer require alxarafe/resource-controller
包简介
ORM-agnostic declarative CRUD controller for PHP. Auto-generates list/edit UIs from field metadata.
README 文档
README
ORM-agnostic declarative CRUD controller for PHP.
Auto-generates list views, edit forms, filters, and actions from field metadata — without coupling to any specific ORM, template engine, or framework.
Features
- 🏗️ Declarative: Define fields and columns, get full CRUD automatically
- 🔌 ORM-Agnostic: Works with Eloquent, Doctrine, PDO, REST APIs, or any data source
- 🎨 UI Components: 15 field types, panels, tabs, filters — all serializable to JSON
- 🪝 Hook System: Extensible lifecycle (before/after save, form field injection)
- 🌍 i18n Ready: Pluggable translator contract
- 📦 Zero Dependencies: Only requires PHP 8.2
Ecosystem
This package is the core of the Alxarafe Resource ecosystem. Use it with the adapters that fit your stack:
| Package | Purpose | Status |
|---|---|---|
| resource-controller | Core CRUD engine + UI components | ✅ Stable |
| resource-eloquent | Eloquent ORM adapter (Repository, Query, Transaction) | ✅ Stable |
| resource-pdo | Generic PDO adapter (Repository, Query, Transaction) | ✅ Stable |
Installation
composer require alxarafe/resource-controller
For Eloquent support:
composer require alxarafe/resource-eloquent
For PDO support:
composer require alxarafe/resource-pdo
Quick Start
use Alxarafe\ResourceController\AbstractResourceController; use Alxarafe\ResourceController\Contracts\RepositoryContract; use Alxarafe\ResourceController\Component\Fields\Text; use Alxarafe\ResourceController\Component\Fields\Decimal; use Alxarafe\ResourceController\Component\Fields\Boolean; class ProductController extends AbstractResourceController { public static function getModuleName(): string { return 'Shop'; } public static function getControllerName(): string { return 'Product'; } public static function url(string $action = 'index', array $params = []): string { return '/products' . ($action !== 'index' ? "/{$action}" : ''); } protected function getRepository(string $tabId = 'default'): RepositoryContract { return new EloquentRepository(Product::class); // or any adapter } protected function getListColumns(): array { return [ new Text('name', 'Name'), new Decimal('price', 'Price', ['min' => 0]), new Boolean('active', 'Active'), ]; } protected function getEditFields(): array { return [ 'general' => [ 'label' => 'General', 'fields' => [ new Text('name', 'Name', ['required' => true]), new Decimal('price', 'Price'), new Boolean('active', 'Active'), ], ], ]; } }
Architecture
┌──────────────────────────────────────────────┐
│ Your Controller │
│ getRepository() → RepositoryContract │
│ getListColumns() → Field[] │
│ getEditFields() → Field[] │
├──────────────────────────────────────────────┤
│ ResourceTrait (this package) │
│ buildConfiguration() │
│ handleRequest() │
│ fetchListData() / saveRecord() │
├──────────────────────────────────────────────┤
│ Contracts │
│ RepositoryContract TranslatorContract │
│ QueryContract MessageBagContract │
│ TransactionContract HookContract │
│ RendererContract │
└──────────────────────────────────────────────┘
↓ implemented by ↓
┌──────────────┐ ┌──────────────┐
│ Eloquent │ │ PDO │
│ Adapter │ │ Adapter │
└──────────────┘ └──────────────┘
Contracts
| Contract | Purpose | Null Default |
|---|---|---|
RepositoryContract |
Data access (CRUD + query) | — (must implement) |
QueryContract |
Fluent query builder | — (from Repository) |
TransactionContract |
DB transactions | NullTransaction |
TranslatorContract |
i18n / translations | NullTranslator |
MessageBagContract |
Flash messages | NullMessageBag |
HookContract |
Plugin extensibility | NullHookService |
RendererContract |
Template rendering | — (optional) |
RelationContract |
Parent-child sync | — (optional) |
Development
Docker
docker compose up -d
docker exec alxarafe-resources composer install
Running the CI pipeline locally
bash bin/ci_local.sh
This runs, in order: PHPCBF → PHPCS → PHPStan → Psalm → PHPUnit.
Running tests only
bash bin/run_tests.sh
License
GPL-3.0-or-later
alxarafe/resource-controller 适用场景与选型建议
alxarafe/resource-controller 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 363 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 04 月 22 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「admin」 「controller」 「crud」 「resource」 「scaffolding」 「ERP」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 alxarafe/resource-controller 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 alxarafe/resource-controller 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 alxarafe/resource-controller 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Give your JS App some Backbone with Models, Views, Collections, and Events.
Gii Generator for double model generation
2lenet/EasyAdminPlusBundle
Analysis module for finding problematical shop data.
A PSR-7 compatible library for making CRUD API endpoints
Admin panel generator for Laravel 8 and based on Vuetify Admin, a separate SPA admin framework running on top of REST APIs.
统计信息
- 总下载量: 363
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 59
- 依赖项目数: 6
- 推荐数: 0
其他信息
- 授权协议: GPL-3.0-or-later
- 更新时间: 2026-04-22