axyr / silverstripe-externaldata
自定义DataObject/ModelAdmin实现,用于与外部数据源协同工作
Requires
- silverstripe/framework: ~3.1
This package is not auto-updated.
Last update: 2024-09-12 15:18:49 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已被删除。
##示例 我在示例文件夹中添加了一些基本示例,您也可以使用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
值。