derrobert /silverstripe-externaldata
用于与外部数据源协同工作的自定义 DataObject/ModelAdmin 实现
Requires
- silverstripe/framework: ~3.1
This package is not auto-updated.
Last update: 2024-09-23 14:44:19 UTC
README
用于与外部数据源协同工作的自定义 DataObject/ModelAdmin 实现
目标是提供一个简单的方式来使用 ModelAdmin 和 GridField 处理外部数据源的数据。
只需创建一个继承自 ExternalDataObject 的 Model,并实现你自己的 get()、write() 和 delete() 方法来与自定义外部数据连接协同工作。该模块包含了一些基本的示例,包括 MongoDB、REST 和外部 MySQL 连接。
此模块处于开发中,一些内容可能会发生变化!
####工作良好的功能
- 创建、读取、更新、删除
- 表单生成器
- 字段转换
- 摘要字段
- 字段标签
- 有限的 canView、canEdit 检查
####不工作的功能
- HasOne、HasMany、ManyMany 关系
- 搜索表单生成器
##ExternalDataObject 这是您需要从 Model 继承的基本对象。大量代码来自 DataObject.php,因此像 SummaryFields、FormScaffolding 和 $form->saveInto() 这样的功能就像 DataObject 一样工作。因此,您仍然需要添加一个静态 $db 数组,就像您为正常 DataObjects 所做的那样。
###示例
class MyExternalDataObject extends ExternalDataObject {
// you need this to make FormScaffolding work
static $db = array(
'Title' => 'Varchar(255)'
);
public static function get() {
$list = parent::get();
// add your code to get a $result of remote records
// ExternalDataAdmins GridField will use this list as well to get 1 item from the list
foreach($result as $item) {
$list->push(new MyExternalDataObject($item));
}
return $list;
}
public static function get_by_id($id) {
// add your code to get one remote record
// This is used in the ExternalDataPage example
}
public function write() {
// add your code to write/update a remote record
}
public function delete() {
// add your code to delete a remote record
$this->flushCache();
$this->ID = '';
}
}
##ExternalDataAdmin 扩展 ModelAdmin,但一些自定义 GridField 组件被替换,以确保 GridField 可以与外部数据协同工作。由于不知道外部数据源和结构,因此 SearchScaffolder 被移除。
##示例 我在 examples 文件夹中添加了一些基本示例,您也可以使用 ExternalDataPage 在前端进行测试。如果您只是想下载后使用,请删除 _manifest_exclude 文件。
注意,MongoDBExternalDataObject 需要 PHP MongoDB 扩展
https://php.ac.cn/manual/en/book.mongo.php
ExternalRestDataObject 需要 RestFullserver 模块
https://github.com/silverstripe/silverstripe-restfulserver
此示例仅连接到 Director::absoluteBaseURL() . 'api/v1' 并查询 RestDataObject 表
ExternalMySQLDataObject 示例也使用 RestDataObject 表。您需要设置静态 $remote_database_config 变量,并使用正确的数据库凭据。
function getID()
ExternalDataObject 仍然需要一个 ID 值,以便您的外部记录可以执行 CRUD 操作。一些数据源,如 MongoDB,允许对象本身是唯一的标识符,标识符也可能是一个字符串。使用此方法将外部数据源的唯一标识符转换为 $this->ID 值。