cucher / validata
验证自定义数据类(框架无关)
dev-master
2016-05-07 19:07 UTC
Requires
- php: >=5.6
- psr/http-message: ^1.0
- respect/validation: ^1.0
Requires (Dev)
- phpunit/phpunit: ^5.2
This package is not auto-updated.
Last update: 2024-09-14 19:19:57 UTC
README
一个用于验证结构化数据与模式匹配的库。
状态
这个库目前正在积极开发中,其API可能会发生变化。如果您想在生产环境中使用它,请几周后再次检查其状态...
为什么以及如何
大多数常见的网络应用程序处理 结构化 输入数据。例如:
- 由HTML表单发送的数据
- 用于AJAX请求的JSON或XML数据
- 发送到服务器API的JSON或XML数据
在所有情况下,数据都需要进行验证。通常,这种验证与其他任务混合在一起,甚至可能与业务逻辑混合。这个库的目标是将验证步骤从业务逻辑中分离出来。
它是如何工作的?这个库提供
- 定义验证模式和验证输入数据与该模式匹配的原语。
- 表示结果和描述错误的类,包括它们的精确位置。
预期的用法是
- 为每个处理非平凡输入数据的控制器操作定义一个模式。这个模式定义了整个数据结构,以及每个单独值的其他特性。
- 输入数据与该模式进行验证。结果包含两部分
- 有效的输入数据部分
- 错误列表,每个错误都包含有关位置和确切错误类型的详细信息。这些信息可以用于向客户端报告错误。
- 控制器操作决定如何处理结果。通常,如果有任何错误,操作将发送包含错误信息的400 HTTP响应。如果没有错误,它可能调用一些业务模块来进一步处理数据。
依赖关系
对于“底层验证”,即验证单个标量值,使用 Respect Validation Library。没有依赖任何全栈框架。该库设计得易于集成到任何应用程序结构中。
用法
use Ckr\Validata\Schema; use Ckr\Validata\Validator; use Respect\Validation\Rules; function action() { $schema = getValidationSchema(); $result = Validator::run($schema, $_POST); if ($result->hasErrors()) { handleErrors($result->getErrors()); } else { handleRequest($result->getValidData()); } } /** * Builds the validation schema for `action` */ function getValidationSchema() { $mainSchema = new Schema\Map(); $emailSchema = new Schema\Scalar(new Rules\Email()); $usernameSchema = new Schema\Scalar(new Rules\Alnum()); $mainSchema->property('email', $emailSchema); $mainSchema->property('username', $usernameSchema); return $mainSchema; } function handleErrors(array $errors) { // TODO handle errors... } function handleRequest(array $validData) { // TODO implement the actual business logic }
虽然看起来代码很多,但其中很多都是相同的,可以抽象化。如何做到这一点,因框架或应用程序结构而异。
特别是错误处理可能可以用于所有相同API或应用程序的操作,因为错误具有详细的 信息,可以轻松地转换成JSON响应(或任何其他结构化数据格式)。
创建模式有点繁琐。我可能会在不久的将来提供构建器或类似的辅助工具,以使组合各种子模式更容易。