alxarafe/resource-controller 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

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

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

PHP Version CI Tests Static Analysis PRs Welcome

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 我们能提供哪些服务?
定制开发 / 二次开发

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

BUG 修复 & 性能优化

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

项目外包 & 长期维护

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

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

统计信息

  • 总下载量: 363
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 59
  • 依赖项目数: 6
  • 推荐数: 0

GitHub 信息

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

其他信息

  • 授权协议: GPL-3.0-or-later
  • 更新时间: 2026-04-22