T-DOC
  • Laravel-11
  • Laravel-10
  • Laravel-6X
  • Laravel-5.5
Dcat-Admin
  • Yii2
  • 重构2
  • Laravel-11
  • Laravel-10
  • Laravel-6X
  • Laravel-5.5
Dcat-Admin
  • Yii2
  • 重构2
  • 入门

    • 简介
    • 安装
    • 1.x升级指南
    • 版本升级
    • 快速开始
    • 开发前必读
    • 主题与颜色
    • 静态资源
    • 视图与自定义页面
    • 多应用 (多后台)
    • JS组件
    • 常见问题
    • Laravel Octane
  • 数据表格

    • 基本使用
    • 列的使用和扩展
    • 列的显示和扩展
    • 行的使用和扩展
    • 工具栏
    • 树状表格
    • 组合表头
    • 数据来源以及查询条件
    • 关联关系
    • 查询过滤
    • 列过滤器
    • 快捷搜索
    • 规格筛选器
    • 数据导出
    • 快捷创建
    • 行内编辑
    • 事件
    • 字段翻译
    • 数据软删除
    • 头部和脚部
    • 异步渲染
  • 数据表单

    • 基本使用
    • 图片/文件上传
    • 字段的使用
    • 字段扩展
    • 数据源
    • 表单弹窗
    • 关联关系
    • JSON表单
    • 分步表单
    • 表单验证
    • 工具表单
    • 事件以及表单响应
    • 初始化
    • 表单布局
    • 字段翻译
    • 字段动态显示
  • 数据详情

    • 基本使用
    • 字段显示
    • 关联关系
    • 字段显示扩展
    • 初始化
    • 字段翻译
  • 模型树

    • 基本使用
  • 数据仓库

    • 基本使用
  • 动作

    • 基本使用
    • 数据表格
    • 数据表单
    • 数据详情
    • 模型树
  • 多语言

    • 基本使用
  • 开发扩展

    • 扩展基本使用
    • 开发扩展
  • 页面组件

    • 异步加载
    • 图表
    • 数据统计卡片
    • 模态窗 (Modal)
    • 工具表单
    • 下拉菜单
    • 单/复选框
    • 选项卡
    • 警告框
    • 提示窗
    • Markdown
    • 卡片
  • 区块 (section)

    • 区块基本使用
  • 动作以及表单响应

    • 动作以及表单响应
  • 权限控制

    • 权限控制
  • 菜单

    • 菜单基本使用
  • 帮助函数

    • 帮助函数
  • 开发工具

    • 基本使用
  • 自定义登陆认证

    • 自定义登录
  • 自定义头部导航

    • 自定义头部导航条
  • 更新日志

    • BETA版本更新日志
    • 更新日志

数据源

Dcat Admin 中文文档 /

表单数据源

模型与数据仓库

数据仓库(Repository)是一个可以提供特定接口对数据进行读写操作的类,通过数据仓库的引入,可以让页面的构建不再关心数据读写功能的具体实现。只需要实现特定的操作接口即可轻松切换数据源,关于数据仓库的详细用法请参考文档数据仓库。

数据来自模型

如果你的数据来自Model,那么你也可以直接使用Model实例,底层会自动把Model转化为数据仓库实例。

当数据源支持模型时,只需创建一个非常简单的Repository类既可:

<?php

namespace App\Admin\Repositories;

use Dcat\Admin\Repositories\EloquentRepository;
use App\Models\Movie as MovieModel;

class Movie extends EloquentRepository
{
    // 这里定义你的模型类名
    protected $eloquentClass = MovieModel::class;

    // 通过这个方法可以指定表单页查询的字段,默认"*"
    public function getFormColumns()
    {
        return [$this->getKeyName(), 'name', 'title', 'created_at'];
    }
}

使用:

use App\Admin\Repositories\Movie;

$form = new Form(new Movie);

...

数据来自外部API

下面以豆瓣电影的API为例子,来展示Repository的表单数据读写操作相关接口的用法:

<?php
namespace App\Admin\Repositories;

use Dcat\Admin\Repositories\Repository;
use Dcat\Admin\Form;

class ComingSoon extends Repository
{
    protected $api = 'https://api.douban.com/v2/movie/coming_soon';

    // 返回你的id字段名称,默认“id”
    protected $keyName = '_id';

    // 查询编辑页数据
    // 这个方法需要返回一个数组
    public function edit(Form $form)
    {
        // 获取id
        $id = $form->builder()->getResourceId();

        $data = file_get_contents("http://api.douban.com/v2/movie/subject/$id");

        return json_decode($data, true);
    }

    // 这个方法用于在修改数据前查询原记录
    // 如果使用了文件上传表单,当文件发生变更时会根据这个原始记录自动删除旧文件
     // 如果不需要此数据返回空数组即可
    public function updating(Form $form)
    {
        // 获取id
        $id = $form->builder()->getResourceId();

        return [];
    }

    // 修改操作
    // 返回一个bool类型的数据
    public function update(Form $form)
    {
        // 获取id
        $id = $form->builder()->getResourceId();

        // 获取要修改的数据
        $attributes = $form->updates();

        // TODO
        // 这里写你的修改逻辑

        return true;
    }

    // 这个方法用于在修改数据前查询原始数据
    // 如果使用了文件上传表单,会根据这个数据自动删除文件
    // 如果不需要此数据返回空数组即可
    public function deleting(Form $form)
    {
        $id = $form->builder()->getResourceId();

        $id = explode(',', $id);

//        $data = file_get_contents("http://api.douban.com/v2/movie/subject/$id");
//
//        return json_decode($data, true);

        return [];
    }

    // 删除数据
    // $deletingData 是由 getDataWhenDeleting 方法返回的数据
    public function destroy(Form $form, $deletingData)
    {
        // 注意这里的id可能是多个
        $id = $form->builder()->getResourceId();

        // 当使用批量删除功能时,这里的id是用“,”隔开的字符串
        $id = explode(',', $id);

        // TODO
//        var_dump($id, $deletingData);

        return true;
    }

}
Last Updated:
Contributors: Hans
Prev
字段扩展
Next
表单弹窗