charcoal/属性

Charcoal Property 定义了一个对象(提供元数据)


README

Property 包提供定义对象元数据的抽象工具。

安装

composer require charcoal/property

概述

属性在对象的 Charcoal 模型metadata 中全局定义。它们提供属性定义、存储定义和验证定义。

metadata() 方法定义在 \Charcoal\Model\DescribableInterface 中。而 properties() 方法定义在 \Charcoal\Property\DescribablePropertyInterface 中。

属性选项

基本属性接口(API)需要/提供以下成员

备注

  • [†] 表示用于验证的选项。

所有这些方法都可以通过 setData() 方法或标准 PSR-1/PSR-2 getter / setter 访问。(foo 将有 foo() 作为 getter 和 setFoo() 作为 setter)。

数据检索

  • 要获取一个规范化的值,请使用 parseVal($val) 方法。
  • 要获取一个安全的、可显示的值,请使用 displayVal($val)
  • 要获取存储准备格式,请使用 storageVal($val)

可以在每个属性中进一步定义自定义数据检索方法。(例如,格式化日期或自定义颜色格式)。

默认验证

验证通过 Validator 对象提供,该对象来自 charcoal/core

  • required
  • unique
  • allow_null

验证正在用新的 charcoal/validator 包重建。

源和存储方法

属性需要 4 个方法才能与 SQL 源集成

  • sqlEncoding() 字符串 SQL 列编码 & 校对(例如:utf8mb4
  • sqlExtra() 字符串 将附加的原始 SQL 字符串
  • sqlType() 字符串 SQL 列类型(例如:VARCHAR(16)
  • sqlPdoType() 整数 PDO 列类型(例如:PDO::PARAM_STR

这些方法是 抽象的,因此必须在实际属性中实现。

属性类型

检索

布尔属性

布尔属性是最简单的一种:它只保存布尔值(true / false)。

布尔属性选项

布尔属性向 基本属性选项 添加以下概念

备注

  • [†] 表示用于验证的选项。

⚠ 布尔属性不能是多个。(multiple() 总是返回 false)。在布尔属性上调用 setMultiple(true) 会抛出异常。

颜色属性

颜色属性存储一个颜色。如果不支持 alpha,则存储为十六进制值(例如:#5590BA)。如果支持 alpha,则存储为 rgba() 字符串值(例如:rgb(85, 144, 186, 0.5))。

颜色属性选项

布尔属性向 基本属性选项 添加以下概念

备注

  • [†] 表示用于验证的选项。

日期时间属性

日期时间属性存储日期(和时间)值。

日期时间属性选项

日期时间属性向 基本属性选项 添加以下概念

备注

  • [†] 表示用于验证的选项。

⚠ 日期时间属性不能是多个。(multiple() 总是返回 false)。在日期时间属性上调用 setMultiple(true) 会抛出异常。

标识符属性

标识符属性包含一个标识符,通常是主要对象标识符(唯一索引键)。

标识符值可以通过多种模式生成。

  • auto-increment是默认模式。它使用存储引擎(mysql)的自动增长特性来保持自动增长的整数索引。
  • uniqid通过PHP的uniqid()函数创建一个13个字符的字符串。
  • uuid创建一个36个字符的字符串(一个RFC-4122 v4通用唯一标识符,uuidv4)。

标识符属性选项

标识符属性向基本属性选项添加以下概念

⚠标识符属性不能是多个。(multiple()总是返回false)。在id属性上调用setMultiple(true)将抛出异常。

标识符属性自定义保存

save($val)时,如果其模式是uniqiduuid,则标识符属性会自动生成ID。

注意:auto-increment模式在保存时不会执行任何操作;它依赖于存储引擎/驱动程序来实现自动增长。

IP属性

IP属性包含一个IP地址。目前只支持IPv4地址。

IP有两种不同的存储模式

  • string是默认模式。它将IP地址存储为192.168.1.1
  • int将IP存储为有符号长整数。

⚠IP属性不能是多个。(multiple()总是返回false)。在ip属性上调用setMultiple(true)将抛出异常。

文件属性

文件属性包含一个可上传的文件。

注意,数据库中应只存储相对1文件路径。

1相对于项目的ROOT加上属性的upload_path

文件属性选项

文件属性向基本属性选项添加以下概念

备注

  • [†] 表示用于验证的选项。

附加文件方法

  • mimetype()setMimetype()
  • filesize()setFilesize()
  • dataUpload()
  • fileUpload()

文件属性自定义保存

save($val)时,如果需要,文件属性会尝试上传文件或从数据创建文件。返回上传文件的路径(相对)。

专业文件属性

音频文件属性

音频属性是专门的文件属性,可能只包含音频数据。

接受的MIME类型

由于AudioProperty扩展了FileProperty,因此提供了“接受的MIME类型”。

默认接受的MIME类型是

  • audio/mp3
  • audio/mpeg
  • audio/wav
  • audio/x-wav.

音频文件属性选项

音频属性向文件属性选项添加以下概念

备注

  • [†] 表示用于验证的选项。

图像文件属性

图像属性是专门的文件属性,可能只包含图像数据。

接受的MIME类型

由于ImageProperty扩展了FileProperty,因此提供了“接受的MIME类型”。

默认接受的MIME类型是

  • image/gif
  • image/jpg
  • image/jpeg
  • image/pjpeg
  • image/png
  • image/svg+xml
  • image/webp

图像文件属性选项

音频属性向文件属性选项添加以下概念

备注

  • [†] 表示用于验证的选项。

语言属性

语言属性包含一个语言值。

LangProperty实现了SelectablePropertyInterface,但将它的choices()方法硬编码为返回活动语言(来自charcoal/translator)。

数字属性

数字属性包含任何类型的数值数据。

对象属性

对象属性包含对特定类型外部对象的引用。

目标对象的标识符(由其obj-typekey确定,通常为"id")是存储在值/数据库中的唯一内容。在显示(使用displayVal())时,应渲染对象的字符串表示形式。

对象属性选项

对象属性向基本属性选项添加以下概念

备注

  • [†] 表示用于验证的选项。

字符串属性

字符串属性选项

字符串属性向基本属性选项添加以下概念

备注

  • [†] 表示用于验证的选项。

字符串默认数据

默认情况下,string属性针对小字符串(最大长度)为255个字符

专用字符串属性

HTML字符串属性

HTML属性是仅可能包含HTML字符串(而不是纯字符串)的专用字符串属性

密码字符串属性

密码属性是专用字符串属性,它存储(加密)密码数据。

使用PHP的password_hash函数进行加密。

密码属性自定义保存

save($val)时,密码属性对要存储的密码进行散列(或重新散列),以确保安全(加密)存储。

电话字符串属性

电话属性是专用字符串属性,它存储电话号码。

目前,仅支持“北美”电话号码格式。

文本字符串属性

文本属性是专用字符串属性,通常存储较长的文本字符串。

映射结构属性

映射结构属性存储复杂的映射结构数据,可以是点(标记)、线以及/或多边形。

属性表摘要,供开发者参考

资源