Laravel-admin 處理 select 有 data 鍵的情況

wozailu發表於2019-09-19

一. 起因

在 laravel-admin 文件中

或者從 api 中獲取選項列表:

$form->select($column[, $label])->options('/api/users');

其中 api 介面的格式必須為下面格式:

[
    {
        "id": 9,
        "text": "xxx"
    },
    {
        "id": 21,
        "text": "xxx"
    },
    ...
]

使用 API Resource 的好處是統一管理,多個欄位隨意組合
這個格式固定,但是 laravel 使用 API Resource 返回資料前面多了 data 鍵,在 laravel 框架試了幾次發現不行,然後發現在 laravel-admin 重寫元件可以解決此問題

稍微提個建議 , laravel-admin 文件可以支援一下全域性搜尋,對查詢文件有點不太友好

開始

在 app/Admin 目錄下建立資料夾 Extensions

追蹤

$form->select($column[, $label])->options('/api/users');

原始碼到 namespace Encore\Admin\Form\Field; 中的 Select.php
發現呼叫了 loadRemoteOptions 方法

  select.select2({
    data: data,
    $configs
  });

接下來把 Select.php 複製到 App\Admin\Extensions
然後修改 loadRemoteOptions 方法

  select.select2({
    data: data.data,
    $configs
  });

最後一步就是修改 app/Admin/bootstrap.php 把原來的檔案遮蔽掉

use Encore\Admin\Form;
Form::forget('select');

Form::extend('select', \App\Admin\Extensions\Select::class);

完成了,如果有更好的方法請留言

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章