derrobert/silverstripe-externaldata

用于与外部数据源协同工作的自定义 DataObject/ModelAdmin 实现

安装: 165

依赖项: 0

建议者: 0

安全: 0

星级: 0

关注者: 2

分支: 8

类型:silverstripe-module

dev-master 2016-10-15 08:17 UTC

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 值。