axyr/silverstripe-externaldata

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

安装数量: 2,186

依赖项: 0

建议者: 0

安全: 0

星标: 9

关注者: 5

分支: 8

开放问题: 3

类型:silverstripe模块

dev-master 2016-08-29 14:01 UTC

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