mcpField
B
bagisto-datagrid-development

bagisto-datagrid-development

github.com/bagisto開発13122 回インストール2 週間前に更新
リポジトリ

bagisto-datagrid-development について

Bagisto の管理画面に一覧ページを作るための DataGrid 開発スキルです。クエリや列の設定、コントローラーとビューの接続、アクション、フィルター、エクスポートを解説します。

主な機能

  1. 01DataGrid サブクラスの構成
  2. 02クエリビルダーと列の設定
  3. 03AJAX コントローラーとビューの接続
  4. 04ACL で制御する行・一括アクション
  5. 05フィルター、並べ替え、エクスポートの指針

活用シーン

  1. 01管理画面の一覧ページ作成
  2. 02グリッドへの列とフィルターの追加
  3. 03行または一括アクションの設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bagisto/agent-skills --skill bagisto-datagrid-development

インストール後、Claude Code で/bagisto-datagrid-developmentを入力して読み込まれたか確認します。

同梱ファイルactions.mdcolumns.md

詳細

DataGrid の開発

管理画面の一覧ページは、DataGrid のサブクラスと、3 行の配線コードで構成されます。エンジン(packages/Webkul/DataGrid)はページネーション、検索、フィルタリング、並べ替え、保存済みフィルター、エクスポートを担当し、サブクラスはクエリを指定して列を定義します。コードベースには 51 個あります。独自の形式を考えるのではなく、最も近いものをコピーしてください。

4 つのメソッド

Webkul\DataGrid\DataGrid は、2 つの抽象メソッドと 2 つの任意のフックを宣言します。

メソッド必須目的
prepareQueryBuilder()はいコレクションではなく、クエリビルダーを返します
prepareColumns()はい列ごとに addColumn([...]) を呼び出します
prepareActions()いいえ行ごとのアクション。各アクションに ACL チェックが必要です
prepareMassActions()いいえチェックボックスのアクション。各アクションに ACL チェックが必要です

調整可能なプロパティです。デフォルト値で問題がある場合にのみオーバーライドしてください。$primaryColumn(デフォルトは 'id')、$sortColumn、$sortOrder('desc')、$itemsPerPage(10)、$perPageOptions。

形式

class CurrencyDataGrid extends DataGrid
{
    /**
     * Prepare query builder.
     *
     * @return Builder
     */
    public function prepareQueryBuilder()
    {
        return DB::table('currencies')
            ->select('id', 'name', 'code');
    }

    /**
     * Add Columns.
     *
     * @return void
     */
    public function prepareColumns()
    {
        $this->addColumn([
            'index'      => 'name',
            'label'      => trans('admin::app.settings.currencies.index.datagrid.name'),
            'type'       => 'string',
            'searchable' => true,
            'filterable' => true,
            'sortable'   => true,
        ]);
    }

    /**
     * Prepare actions.
     *
     * @return void
     */
    public function prepareActions()
    {
        if (bouncer()->hasPermission('settings.currencies.edit')) {
            $this->addAction([
                'index'  => 'edit',
                'icon'   => 'icon-edit',
                'title'  => trans('admin::app.settings.currencies.index.datagrid.edit'),
                'method' => 'GET',
                'url'    => fn ($row) => route('admin.settings.currencies.edit', $row->id),
            ]);
        }
    }
}

addColumn/addAction の配列内で => を揃えるのは、編集対象のファイルがすでに揃えている場合に限ってください。Pint はどちらの形式も強制しません。また、コードベースには両方の形式があります。

配線

コントローラーは、AJAX リクエストには JSON を、それ以外にはビューを返します。1 つのルートで 2 種類のレスポンスを返します。

public function index()
{
    if (request()->ajax()) {
        return datagrid(CurrencyDataGrid::class)->process();
    }

    return view('admin::settings.currencies.index');
}

Blade 側では、同じルートを指定するタグを 1 つ記述します。

<x-admin::datagrid :src="route('admin.settings.currencies.index')" />

クラスが DataGrid を継承していない場合、datagrid() は InvalidDataGridException をスローするため、クラス名だけが契約となります。

参照ファイル

ファイル参照するタイミング
columns.md列の種類、検索/フィルター/並べ替えのフラグ、ドロップダウンの選択肢、クロージャー、結合、addFilter
actions.md行アクション、複数行アクション、ACL チェック、エクスポート

必ず守ること

  • prepareQueryBuilder() はビルダーを返します。 ->get()、->paginate() を呼び出したり、コレクションにマッピングしたりすると、ページネーション、フィルタリング、エクスポートが機能しなくなります。エンジンは返されたクエリに処理を追加するためです。
  • DB:: を使うことが想定されるのは、クエリビルダーだけです。 Bagisto のそれ以外の箇所ではリポジトリを使いますが、DataGrid は設計上、クエリビルダーを基盤とします。
  • すべてのアクションと複数行アクションは bouncer()->hasPermission(...) でラップします。 権限のない管理者にもアクションが表示されてしまいます。DataGrid は、この対応が最も忘れられやすい箇所です。
  • すべての label は trans() を通し、キーを 23 のすべてのロケールに追加します。
  • 結合したクエリでは、エイリアス付きの列ごとに addFilter() が必要です。詳しくは columns.md を参照してください。これがないと、その列のフィルタリングや並べ替えで、あいまいな列名に関する SQL エラーが発生します。
  • クロージャーで埋め込む値は、すべてエスケープします。 セルは v-html を通じて描画されます。エンジンは生の値からタグを除去しますが、引用符は除去しません。そのため、属性内に値を配置すると、属性の外に抜け出せる可能性があります。詳しくは columns.md を参照してください。

必須のサブスキル: 変更を完了とする前に、bagisto-change-verification を使用してください。

コメント