查
<h2><strong>列表</strong></h2>
<ul>
<li>前端会根据菜单路径, 访问对应的路由, 通过 <code>get</code> 请求, 访问到对应控制器的 <code>index</code> 方法</li>
<li>这里通过 <code>_action</code> 参数, 让这个方法同时处理了 3 个功能
<ul>
<li>原因: 不需要额外的定义路由, 一个 <code>resource</code> 路由就可以满足所有 <code>CRUD</code> 的功能</li>
</ul></li>
</ul>
<pre><code class="language-php">public function index()
{
// 带有参数 ?_action=getData 的请求, 查询数据并返回
if ($this-&gt;actionOfGetData()) {
return $this-&gt;response()-&gt;success($this-&gt;service-&gt;list());
}
// 带有参数 ?_action=export 的请求, 处理导出
if ($this-&gt;actionOfExport()) {
return $this-&gt;export();
}
// 没有携带 _action 参数的请求, 返回列表结构
return $this-&gt;response()-&gt;success($this-&gt;list()); // 这里调用了 list 方法
}</code></pre>
<p><br></p>
<ul>
<li>list 方法, 用于返回列表结构</li>
</ul>
<pre><code class="language-php">public function list()
{
// baseCRUD 方法中, 配置了部分基础配置, 如果需要修改, 可以直接在后面覆盖
$crud = $this-&gt;baseCRUD()
// CRUD 的顶部工具栏
-&gt;headerToolbar([
$this-&gt;createButton(true), // 新增按钮
...$this-&gt;baseHeaderToolBar(), // 工具栏内的其他操作按钮
])
// 筛选器
-&gt;filter(
// baseFilter 方法中配置了一个基础的表单
$this-&gt;baseFilter()-&gt;body(
// 这里边配置筛选的表单项
amis()-&gt;TextControl('keyword', __('admin.keyword'))
)
)
// 表格列
-&gt;columns([
amis()-&gt;TableColumn('id', 'ID')-&gt;sortable(),
amis()-&gt;TableColumn('name', __('admin.admin_user.name')),
// 行操作按钮
$this-&gt;rowActions([
$this-&gt;rowEditButton(true), // 编辑按钮
$this-&gt;rowDeleteButton(), // 删除按钮
]),
]);
// baseList 方法中是基础的页面配置
return $this-&gt;baseList($crud);
}</code></pre>
<ul>
<li>Service 中的 list 方法, 用于查询数据</li>
</ul>
<pre><code class="language-php">/**
* 列表 获取数据
*
* @return array
*/
public function list()
{
// 处理查询条件
$query = $this-&gt;listQuery();
// 分页查询数据
$list = $query-&gt;paginate(request()-&gt;input('perPage', 20));
$items = $list-&gt;items();
$total = $list-&gt;total();
return compact('items', 'total');
}
/**
* 列表 获取查询 (大多数情况下, 只需要重写这个方法即可)
*
* @return Builder
*/
public function listQuery()
{
$query = $this-&gt;query(); // 对应模型的 query 方法
$this-&gt;sortable($query); // 处理排序
$this-&gt;searchable($query); // 处理 CRUD 的 searchable 属性
return $query; // 返回查询条件
}</code></pre>
<p><br></p>
<h2><strong>详情</strong></h2>
<ul>
<li>页面模式下
<ul>
<li>通过访问 <code>xxx/{id}</code> 路由, 进入到 <code>AdminController</code> 方法中的 <code>show</code> 方法</li>
<li>在 <code>show</code> 方法中, 调用 <code>detail</code> 方法, 并返回新增页面的结构</li>
</ul></li>
<li>弹窗模式下
<ul>
<li>在访问 <code>rowShowButton</code> 方法时, 会调用 <code>detail</code> 方法, 并返回详情页面的结构</li>
</ul></li>
</ul>
<pre><code class="language-php">/**
* 详情 (AdminController 中)
*
* @param $id
*
* @return JsonResponse|JsonResource
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function show($id)
{
// 判断参数, 查询详情并返回
if ($this-&gt;actionOfGetData()) {
return $this-&gt;response()-&gt;success($this-&gt;service-&gt;getDetail($id));
}
$detail = amis()
-&gt;Card()
-&gt;className('base-form')
-&gt;header(['title' =&gt; __('admin.detail')])
-&gt;body($this-&gt;detail()) // 这里调用了 detail 方法
// 工具栏
-&gt;toolbar([
$this-&gt;backButton() // 返回按钮
]);
$page = $this-&gt;basePage()-&gt;body($detail);
return $this-&gt;response()-&gt;success($page);
}
/**
* 前端 amis 通过识别 detail 方法返回的结构来详情页面
*
* @param bool $id 对应的主键
*
* @return Form
*/
public function detail($id)
{
return $this-&gt;baseDetail()-&gt;body([
amis()-&gt;StaticExactControl()-&gt;name('id')-&gt;label('ID'),
]);
}
/**
* 详情 获取数据 (Service 中)
*
* @param $id
*
* @return Builder|Builder[]|\Illuminate\Database\Eloquent\Collection|Model|null
*/
public function getDetail($id)
{
return $this-&gt;query()-&gt;find($id);
}</code></pre>