自定义业务逻辑
<h2>方法重写</h2>
<p>在 <code>Slowlyo\SlowAdmin\Controllers\AdminController</code> 中已经实现了以下方法:</p>
<table>
<thead>
<tr>
<th style="text-align: left;">方法</th>
<th style="text-align: left;">功能</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">index()</td>
<td style="text-align: left;">列表页及获取列表数据</td>
</tr>
<tr>
<td style="text-align: left;">create()</td>
<td style="text-align: left;">新增页面</td>
</tr>
<tr>
<td style="text-align: left;">store()</td>
<td style="text-align: left;">新增数据的保存逻辑</td>
</tr>
<tr>
<td style="text-align: left;">show()</td>
<td style="text-align: left;">详情页面及获取详情数据</td>
</tr>
<tr>
<td style="text-align: left;">edit()</td>
<td style="text-align: left;">编辑页面</td>
</tr>
<tr>
<td style="text-align: left;">update()</td>
<td style="text-align: left;">编辑数据的保存逻辑</td>
</tr>
<tr>
<td style="text-align: left;">destroy()</td>
<td style="text-align: left;">删除数据的逻辑</td>
</tr>
</tbody>
</table>
<p>就是 resource 路由对应的那几个方法, 如果你还不知道请看 <a href="https://learnku.com/docs/laravel/9.x/controllers/12212#resource-controllers">文档</a></p>
<p>> 当默认的方法不满足你的需求时, 可以在你的 controller 重写这几个方法</p>
<h2>Controller</h2>
<h4>以角色管理控制器举例</h4>
<pre><code class="language-php">&lt;?php
namespace Slowlyo\SlowAdmin\Controllers;
use ...;
class AdminRoleController extends AdminController
{
// 功能对应的Service
// 作用: 在 AdminController 中用于实现基础的 CRUD
protected string $serviceName = AdminRoleService::class;
// 该方法实现了列表页的显示, 以及获取列表数据
public function index(Request $request): JsonResponse|JsonResource
{
// 返回列表数据
if ($this-&gt;actionOfGetData()) {
return $this-&gt;response()-&gt;success($this-&gt;service-&gt;list());
}
// 返回页面结构
return $this-&gt;response()-&gt;success($this-&gt;list());
}
// 列表页的页面结构
public function list(): Page
{
// -&gt;baseCRUD() 在AdminController 中
// 对一些基础的页面配置作了封装
$crud = $this-&gt;baseCRUD()
// 假如你想单独设置列表页的标题
// 可以在此处再次调用 -&gt;title() 方法, 他会覆盖 baseCRUD() 中的设置
// -&gt;title('Title')
// 是否展示筛选折叠按钮
-&gt;filterTogglable(false)
// 列表筛选部分表单
-&gt;filter($this-&gt;baseFilter()-&gt;body([
// 内容就是 Form 的 body 属性
// 数据筛选的查询需要在 listQuery() 方法中自行实现
amis()-&gt;InputText()-&gt;name('name')-&gt;label('名称')
]))
// 这是数据列
-&gt;columns([
amis()-&gt;TableColumn()-&gt;label('ID')-&gt;name('id')-&gt;sortable(true),
amis()-&gt;TableColumn()-&gt;label('名称')-&gt;name('name'),
amis()-&gt;TableColumn()-&gt;label('标识')-&gt;name('slug')-&gt;type('tag'),
amis()-&gt;TableColumn()-&gt;label('创建时间')-&gt;name('created_at')-&gt;type('datetime')-&gt;sortable(true),
amis()-&gt;TableColumn()-&gt;label('更新时间')-&gt;name('updated_at')-&gt;type('datetime')-&gt;sortable(true),
// 这个方法会添加操作列
// 默认会生成 -&gt;rowActions()
$this-&gt;rowActionsOnlyEditAndDelete(),
]);
// baseList() 封装了基础的 Page 以及默认的新增按钮
return $this-&gt;baseList($crud);
}
// 表单页面结构 (新增/编辑)
public function form($isEdit): Form
{
return $this-&gt;baseForm()-&gt;body([
InputText::make()-&gt;label('名称')-&gt;name('name')-&gt;required(true),
InputText::make()-&gt;label('标识')-&gt;name('slug')-&gt;description('角色的唯一标识, 不可重复')-&gt;required(true),
TreeSelect::make()
-&gt;name('permissions')
-&gt;label('权限')
-&gt;searchable(true)
-&gt;multiple(true)
-&gt;options(AdminPermissionService::make()-&gt;getTree())
-&gt;labelField('name')
-&gt;valueField('id')
-&gt;autoCheckChildren(false)
-&gt;joinValues(false)
-&gt;extractValue(true),
]);
}
// 详情页面结构
public function detail(): Form
{
return $this-&gt;baseDetail()-&gt;body([]);
}
}
</code></pre>
<h2>Service</h2>
<h4>以角色 Service 举例</h4>
<pre><code class="language-php">&lt;?php
namespace Slowlyo\SlowAdmin\Services;
use ...;
class AdminRoleService extends AdminService
{
// 功能对应的 Model
protected string $modelName = AdminRole::class;
// 几乎所有的数据库操作都在 Service 中
// 不满足的地方, 在此处重写即可
// 列表/导出数据查询
public function listQuery()
// 列表数据
public function list()
// 详情获取数据
public function getDetail($id)
// 编辑获取数据
public function getEditData($id)
// 修改保存
public function update($id, $data)
// 新增保存
public function store($data)
// 删除
public function delete($ids)
}</code></pre>