locomotivemtl/charcoal-object

对象(内容和使用者数据)定义,以及对象行为和工具。

0.8.1 2024-01-29 23:58 UTC

README

对象定义(内容和使用者数据)、行为和工具。

目录

如何安装

安装 charcoal-object 的首选(也是唯一支持)方式是使用 composer

★ composer require locomotivemtl/charcoal-object

依赖项

  • PHP 5.6+
    • 这是最后一个支持的 PHP 版本。
    • PHP 7 也受支持(意味着 travis 上为绿色…)。

Charcoal 对象

命名空间 \Charcoal\Object 提供了大量基本类、助手以及对象行为(接口 + traits)。

基本类

所有 Charcoal 项目的对象类都应扩展以下两个基础类之一,\Charcoal\Object\Content,用于由管理员创建和管理的数据,或 \Charcoal\Object\UserData,用于来自客户端/用户创建的数据。

内容

应使用 Content 基础类来处理所有可以“管理”的对象。通常由管理员通过 charcoal-admin 模块管理。它向对象添加“活动”标志以及创建和修改信息。

API

  • setActive($active)
  • active()
  • setPosition($position)
  • position()
  • setCreated($created)
  • created()
  • setCreatedBy($createdBy)
  • createdBy()
  • setLastModified($lastModified)
  • lastModified()
  • setLastModifiedBy($lastModifiedBy)
  • lastModifiedBy()

Content 类扩展了来自 charcoal-core 模块的 \Charcoal\Model\AbstractModel,这意味着它也继承了其 API 以及 DescribableInterfacemetadata()setMetadata()loadMetadata() 等等)和 StorableInterfaceid()key()save()update()delete()load()loadFrom()loadFromQuery()source()setSource() 等等)。

AbstractModel 类扩展了 \Charcoal\Config\AbstractEntity,它还定义了基本数据访问方法(setData()data()keys()has()get()set(),以及 ArrayAccessJsonSerializableSerializable 接口)。

属性(元数据)

[1] 在 save() 时自动生成
[2] 在 update() 时自动生成

默认元数据定义在 metadata/charcoal/object/content.json

使用者数据

应使用 UserData 类来处理所有预期从项目的“客户端”或“最终用户”输入的对象。

API

  • setIp($ip)
  • ip()
  • setTs($ts)
  • ts()
  • setLang($lang)
  • lang()

Content 类扩展了来自 charcoal-core 模块的 \Charcoal\Model\AbstractModel,这意味着它也继承了其 API 以及 DescribableInterfacemetadata()setMetadata()loadMetadata() 等等)和 StorableInterfaceid()key()save()update()delete()load()loadFrom()loadFromQuery()source()setSource() 等等)。

AbstractModel 类扩展了 \Charcoal\Config\AbstractEntity,它还定义了基本数据访问方法(setData()data()keys()has()get()set(),以及 ArrayAccessJsonSerializableSerializable 接口)。

属性(元数据)

[1] 在 save()update() 时自动生成

默认元数据定义在 metadata/charcoal/object/user-data.json

对象行为

可存档

存档行为尚未文档化。它仍在积极开发中。

可分类

API

  • setCategory($category)
  • category()
  • setCategoryType($type)
  • categoryType()

属性(元数据)

[1] 实现的元数据中必须明确设置类别 obj_type

默认元数据定义在 metadata/charcoal/object/catgorizable-interface.json

类别

API

  • setCategoryItemType($type)
  • categoryItemType()
  • numCategoryItems()
  • hasCategoryItems()
  • categoryItems()

属性(元数据)

默认元数据定义在 metadata/charcoal/object/catgory-interface.json

分层

API

  • hasMaster()
  • isTopLevel()
  • isLastLevel()
  • hierarchyLevel()
  • master()
  • toplevelMaster()
  • hierarchy()
  • invertedHierarchy()
  • isMasterOf($child)
  • recursiveIsMasterOf($child)
  • hasChildren()
  • numChildren()
  • recursiveNumChildren()
  • children()
  • isChildOf($master)
  • recursiveIsChildOf($master)
  • hasSiblings()
  • numSiblings()
  • siblings()
  • isSiblingOf($sibling)

属性(元数据)

默认元数据定义在 metadata/charcoal/object/hierarchical-interface.json

可发布

  • setPublishDate($publishDate)
  • publishDate()
  • setExpiryDate($expiryDate)
  • expiryDate()
  • setPublishStatus($status)
  • publishStatus()
  • isPublished()

属性(元数据)

默认元数据定义在 metadata/charcoal/object/publishable-interface.json

可修订

可修订对象实现了 \Charcoal\Object\Revision\RevisionableInterface,这可以通过使用 \Charcoal\Object\Revision\RevisionableTrait 来轻松实现。

可修订对象创建 修订版,记录对象版本之间的变更,作为 差异

API

  • setRevisionEnabled(bool$enabled)
  • revisionEnabled()
  • revisionObject()
  • generateRevision()
  • latestRevision()
  • revisionNum(integer $revNum)
  • allRevisions(callable $callback = null)
  • revertToRevision(integer $revNum)

属性(元数据)

可修订行为不实现任何属性,因为所有逻辑和数据都包含在修订版中。

可路由

可路由行为尚未文档化。它仍在积极开发中。

助手

ObjectDraft

ObjectRevision

存储 中的每次 update 操作中,可修订对象都会创建一个新的 修订版(一个 \Charcoal\Object\ObjectRevision 实例),它记录了对象版本之间的变更(差异

修订属性

修订方法

  • createFromObject(RevisionableInterface $obj)
  • createDiff(array $dataPrev, array $dataObj)
  • lastObjectRevision(RevisionableInterface $obj)
  • objectRevisionNum(RevisionableInterface $obj, integer $revNum)

ObjetSchedule

(通常从charcoal管理后端)可以创建 计划(一个 \Charcaol\Object\ObjectSchedule 实例),该计划将一组更改自动应用于对象

计划属性

计划方法(API)

  • process([callable $callback, callable $successCallback,callable $failureCallback])

计划操作应该通过定时cron作业运行。charcoal-admin模块包含一个自动运行计划的脚本

★ ./vendor/bin/charcoal admin/object/process-schedules`

开发

安装开发环境

★ composer install --prefer-source

运行脚本(phplint、phpcs和phpunit)

★ composer test

API文档

开发依赖项

  • phpunit/phpunit
  • squizlabs/php_codesniffer
  • satooshi/php-coveralls

持续集成

编码风格

charcoal-object模块遵循Charcoal编码风格

可以使用 composer phpcs 执行代码风格验证/强制执行。还可以使用 composer phpcbf 使用自动修复器。

作者

许可证

木炭采用MIT许可证。详细信息请参阅许可证