コンテンツにスキップ

EC-SPOKE配付構想

MIT+GitHub Packages+ComposerによるSRC+APPモデル

概要

全体を雛形で提供する。配付方式:ZIP or COMPOSER CORE部分もGitHub Packages+Composerにして部分更新

ディレクトリ構造

ec-spoke/
├── core/                      ← MIT配布ライブラリ
│   ├── composer.json
│   └── src/
└── app/                       ← 実際のアプリ本体
    ├── composer.json          ← "require": {"other-org/ec-spoke-core": "^1.0"}
    ├── vendor/
    ├── public/
    ├── config/
    └── resources/

composer.json の設定案

core側

{
  "name": "other-org/ec-spoke-core",
  "description": "EC-SPOKE core framework",
  "type": "library",
  "license": "MIT",
  "autoload": {
    "psr-4": {
      "EcSpoke\\Core\\": "src/"
    }
  },
  "require": {
    "laravel/framework": "^11.0",
    "filament/filament": "^4.1"
  }
}

app側

{
  "name": "other-org/ec-spoke-app",
  "require": {
    "php": "^8.2",
    "other-org/ec-spoke-core": "^1.0"
  },
  "repositories": [
    {
      "type": "composer",
      "url": "https://github.com/other-org/ec-spoke-core"
    }
  ]
}

書換方法

use EcSpoke\Core\Filament\Resources\ProductResource; use Filament\Forms\Components\TextInput;

ProductResource::configure(function ($resource) {
    $resource->form(function ($form) {
        $form->schema([
            ...$form->getSchema(),
            TextInput::make('custom_field')->label('内部メモ'),
        ]);
    });
});

クラスのオーバーライド

// app/Admin/Resources/BrandResource.php
namespace App\Admin\Resources;

use EcSpoke\Core\Filament\Resources\BrandResource as BaseBrandResource;

class BrandResource extends BaseBrandResource
{
    protected static ?string $navigationGroup = 'カスタム商品管理';

    public static function form(Schema $schema): Schema
    {
        $schema = parent::form($schema);
        // 任意の項目を追加
        return $schema;
    }
}