packagefactory / atomicfusion-proptypes
用于 fusion-prototypes 包的 react-propTypes 融合版本,适用于 PackageFactory.AtomicFusion:Component 和 Neos.Fusion:Component
Requires
- neos/fusion: ^8.0 || dev-master
- dev-master
- v2.2.0
- 2.1.x-dev
- v2.1.1
- v2.1.0
- v2.0.2
- v2.0.1
- v2.0.0
- v1.3.1
- v1.3.0
- v1.2.0
- v1.1.1
- v1.1.0
- v1.0.1
- v1.0.0
- dev-bugfix/handleArrayAccessInDataStructureValidatorGracefully
- dev-feature/propsForPrototypes
- dev-feature/supportObjectsWithToStringMethodInStringPropType
- dev-bugfix/travis
- dev-feature/strictMode
- dev-task/improveErrorRendering
This package is auto-updated.
Last update: 2024-09-12 16:36:59 UTC
README
通过
@propType
注解验证传递给组件的属性。propType 注解的语法来源于 react-propTypes。
注意:此包默认仅验证开发环境中的属性。
prototype(Vendor.Site:Example) < prototype(Neos.Fusion:Component) {
@propTypes {
# optional, enforce that only validated props exist
@strict = true
# validation rules for props
title = ${PropTypes.string.isRequired}
subtitle = ${PropTypes.string}
}
}
这将使用在 @propTypes 部分创建的验证器来验证给定的属性。
Fusion 验证器原型
属性也可以通过融合对象指定。
@propTypes {
# all props can be marked as required via `@required = true`
int = PropTypes:Int {
@required = true
}
float = PropTypes:Float
bool = PropTypes:Bool
# strings allow to specify an optional `regularExpression`
string = PropTypes:String {
regularExpression = '/hello world/'
}
# allows array values that satisfy the `type`
array = PropTypes:Array {
type = PropTypes:Int
}
# allow values that satisfy one of the given validators
union = PropTypes:Union {
int = PropTypes:Int
string = PropTypes:String
...
}
# allow exacly the values that are specified
enum = PropTypes:Enum {
value1 = "foo"
value2 = "bar"
...
}
# a nested structure that is valid once all children valídate
dataStructure = PropTypes:DataStructure {
title = PropTypes:String
description = PropTypes:String
...
}
# a php object that satisfies the given interface
instanceOf = PropTypes:InstanceOf {
type = '\DateTimeInterface'
}
# data structure validator that uses the defined proptypes from another prototype
fromPrototype = PropTypes:FromPrototype {
prototypeName = "Vendor.Site:Prototype"
}
}
propType 辅助工具支持的方法
PropTypes.any
:接受任何值,包括 null。PropTypes.boolean
:验证给定的是布尔值,接受 null。PropTypes.integer
:验证给定的是整数,接受 null。PropTypes.float
:
验证给定的是浮点数,接受 null。PropTypes.string
:
验证给定的是字符串,接受 null。PropTypes.regex('/pattern/')
:验证给定的字符串与模式匹配。PropTypes.oneOf([123, "foo", "bar"])
:验证值等于给定选项之一。PropTypes.arrayOf( PropTypes.string )
:验证给定的数组,并使用给定的验证器进行验证,接受 null。PropTypes.anyOf( PropTypes.string, PropTypes.integer )
:验证值至少与给定验证器之一进行验证,接受 null。PropTypes.dataStructure({'foo': PropTypes.integer, 'bar': PropTypes.string})
:验证给定数组的键与分配的验证器进行验证,接受 null 并忽略所有其他键。键验证器必须定义单个键是否是必需的。PropTypes.shape({'foo': PropTypes.integer, 'bar': PropTypes.string})
:验证给定数组的键与分配的验证器进行验证,接受 null 并忽略所有其他键。键验证器必须定义单个键是否是必需的。PropTypes.fileExists
:验证给定值是现有文件。PropTypes.instanceOf('Neos.Neos:Document')
:验证给定类型,如果值是节点,则检查节点类型而不是 PHP 类,接受 null。
强制值
PropTypes.*.isRequired
:为了确保提供了一个值,可以在类型验证之后调用 isRequired 方法。这将添加一个额外的 notEmpty 验证器来强制提供值。
工作原理
如果启用验证,则会在 Neos.Fusion:Component 和 PackageFactory.AtomicFusion:Component 实现的 evaluate 方法周围包装一个方面。
此方面将评估 @propTypes
部分中的键,这些键预期返回 Flow-Validators(Neos\Flow\Validation\Validator\ValidatorInterface
)。然后评估每个键的当前 prop 值并传递给验证器。如果任何验证结果包含错误,则抛出 fusion-error。
PropTypes
-EelHelper 是 PackageFactory\AtomicFusion\PropTypes\Validators\PropTypeValidator
的包装器,它同时是 EelHelper 和验证器。此对象创建了一个复合验证器,该验证器可以通过 eel 以类似 react-propTypes 的语法进行控制。
通过创建返回自定义验证器的 FusionObjects 或 EelHelpers,如果需要,可以扩展此机制。
严格模式
在严格模式下,如果开发环境中将未经验证的属性传递给组件,则会抛出错误。这确保了所有属性都经过验证。
要为组件启用严格模式,请在 @propTypes
中添加 @strict = true
。
prototype(Vendor.Site:Example) < prototype(Neos.Fusion:Component) {
@propTypes {
@strict = true
...
}
}
设置
通过设置启用 propType 验证。默认情况下,此设置在 开发
和 测试
环境中启用,但在 生产
环境中未启用。
PackageFactory: AtomicFusion: PropTypes: enable: false
安装
PackageFactory.AtomicFusion.PropTypes 可通过 packagist 获取。只需运行 composer require packagefactory/atomicfusion-proptypes
即可。
我们使用语义版本控制,每次重大更改都会增加主版本号。
许可证
请参阅许可证文件