实体是应用程序中的任何类型的对象,例如提交、审阅任务、讨论或文件。
每个实体都在模式文件中描述,并在应用程序中表示为以下内容:
数据对象
班用于实例化此实体的对象。提交服务
,以获取、验证、添加、编辑和删除这些对象。服从
,以在对象和数据库之间进行通信。提交处理程序
,它为这些对象提供REST API端点。A.数据对象
类提供了一个简单的API来获取和设置对象的数据。
提示:
数据对象
让我们扮演……的角色模型
MVC(模型-视图-控制器)应用程序体系结构中的。
创建一个新对象。
进口(“课堂。日记。日记”);美元的杂志=新杂志();
设置对象上的数据。
美元的杂志->设置数据(“已启用”,真正的);
从对象中获取数据。
美元已被没收=美元的杂志->获取数据(“已启用”);
有些数据是多语言的,并存储每个区域设置的值。传递区域设置代码以获取本地化值。
$name=美元的杂志->getLocalizedData(“名字”,“恩,我们”);
当您省略locale参数时,它将返回当前活动区域设置的值,或返回日志的主要区域设置。
$name=美元的杂志->getLocalizedData(“名字”);
这个
屈服
对象的工作方式不同。它将返回到提交的区域设置,而不是日志的主要区域设置。
通过一次传递所有区域设置来设置本地化数据。
$name=美元的杂志->设置数据(“名字”,[“恩,我们”=>《公共知识杂志》,“fr_CA”=>“公共研究杂志”,]);
或者在设置数据时指定区域设置代码。
$name=美元的杂志->设置数据(“名字”,《公共知识杂志》,“恩,我们”);
A.数据对象
类可能包含其他帮助器方法来编译或格式化请求的数据。例如问题
类提供一个方法,该方法将返回一个包含卷、数字、年份和标题的字符串。
美元发行->设置数据(“体积”,3.);美元发行->设置数据(“数量”,2.);美元发行->设置数据(“年”,1983);美元发行->设置数据(“头衔”,"微生物特刊",“恩,我们”);回响美元发行->getIssueIdentification();//第3卷第2期(1983年)微生物特刊
A.数据对象
类不应直接访问数据库。如果助手方法需要另一个对象,则应将其作为参数传递给该方法。
实体是使用的扩展版本定义的json模式,一种用于记录对象属性的JSON语法。
具有两个属性的简单模式,身份证件
和标题
,看起来像这样。
{“标题”:“示例对象”,“说明”:“演示架构的示例对象。”,“属性”:{“id”:{“类型”:“整数”,“只读”:真正的},“标题”:{“类型”:“字符串”}}}
json模式语法在这些例子.
提示:JSON是比JavaScript更严格的语法。使用JSONLint以识别模式中的错误。
下面的部分将介绍我们如何修改或扩展json模式语法以满足我们的需要。
我们不使用json模式的日期
和日期-时间
格式。相反,我们使用日期iso
(YYYY-MM-DD
)及日期时间iso
(YYYY-MM-DD HH:MM:SS
)更严格地匹配我们自己的日期/时间处理。
将此属性指定给无法编辑的属性,例如对象ID和URL。
将此属性分配给在添加或编辑对象时使用但在请求对象时不会返回的属性。
此属性的一个示例是临时文件ID
用于保存文件但随后被丢弃的。
将此属性指定给要显示在对象摘要视图中的特性。摘要视图通常用于返回对象列表的端点。
当属性的默认值必须本地化时,指定该属性。该值应该与区域设置键匹配。
将此属性指定给在保存到数据库之前应验证的属性。我们不支持json模式的标准验证规则。看见验证.
将此属性指定给可以位于多个区域设置中的数据。
{...“属性”:{“关于”:{“类型”:“字符串”,“多语言”:真正的}}}
应用程序将期望与此属性进行交互,就像它是一个区域设置对象一样。
{“恩,我们”:“关于日记……”,“fr_CA”:“一份提议的杂志…”}
任何验证规则都将应用于集合中的每个区域设置值。
json模式中描述为对象的数据应该是PHP中的关联数组。
当一个属性应该添加到一个应用程序中的实体而不是另一个应用程序中时,请使用两个具有相同名称的模式文件。
lib/pkp/schemas/context.json
{“标题”:“背景”,“说明”:“杂志或出版社。”,“类型”:“对象”,“属性”:{“关于”:{“类型”:“字符串”,“多语言”:真正的}}}
schemas/context.json
{“标题”:“日志”,“说明”:“一本日记。”,“属性”:{“缩写”:{“类型”:“字符串”,“多语言”:真正的}}}
将合并这些架构文件以生成一个组合架构。当存在相同的属性时,应用程序的架构将覆盖库的架构。
当一个实体有一个模式时,它是刀应该延长SchemaDAO
班此类将使用模式文件来确保从数据库读取和写入的数据符合模式。
模式文件用于生成API文档.
钩子可用于添加、编辑或删除实体的属性。
添加机构之家
财产归上下文
实体。
挂钩登记处::登记('架构::获取::上下文',函数($hookName,$args){$schema=$args[0];$schema->属性->机构之家=(对象)[“类型”=>“字符串”,“API摘要”=>真正的,“多语言”=>真正的,“验证”=>[可空的]];回来错误的;});
要求日志首字母缩写不超过3个字符。
挂钩登记处::登记('架构::获取::上下文',函数($hookName,$args){$schema=$args[0];如果(!财产存在($schema->属性,“首字母缩略词”)){回来;}$schema->属性->缩略语->验证=[“马克斯:3”];回来错误的;});
如果您的代码将包含在应用程序中,最好直接将属性添加到架构中。
了解更多关于实体在数据库中的存储方式.