germania-kg/formvalidator

可用于验证和过滤用户输入,并提供方便的评估API。

1.5.1 2022-03-30 09:42 UTC

This package is auto-updated.

Last update: 2024-08-29 04:03:38 UTC


README

可用于验证和过滤用户输入,并提供方便的评估API。

Packagist PHP version Build Status Scrutinizer Code Quality Code Coverage Build Status

使用Composer安装

$ composer require germania-kg/formvalidator

表单验证

通过调用对象进行验证。__invoke方法接受数组和Psr\Http\Message\ServerRequestInterface实例。

<?php
use Germania\FormValidator\FormValidator;
use Germania\FormValidator\InputContainer;

// Setup
$required = [
	"send_button"     =>   FILTER_VALIDATE_BOOLEAN,
	"user_email"      =>   FILTER_VALIDATE_EMAIL,
	"user_login_name" =>   FILTER_SANITIZE_STRING
];

$optional = [
	"family_name"     =>   FILTER_SANITIZE_STRING,
	"first_name"      =>   FILTER_SANITIZE_STRING
];

$formtest = new FormValidator( $required, $optional );

// Invoking uses PHP's filter_var_array internally.
// Arrays accepted but Psr\Http\Message\ServerRequestInterface
// will do as well.
// Return value is InputContainer instance:
$filtered_input = $formtest( $_POST );
$filtered_input = $formtest( $request );

// At least one required field valid?
echo $formtest->isSubmitted();

// All required fields valid?
echo $formtest->isValid();

添加字段

实例化后,您可以添加必需或可选字段。如果使用addRequired添加现有可选字段,则该字段不再为可选字段;同样,如果使用addOptional添加必需字段,则必需字段不再是必需字段。

$formtest = new FormValidator( $required, $optional );

$formtest->addRequired('additional_info', FILTER_SANITIZE_STRING);
$formtest->addOptional('additional_info', FILTER_SANITIZE_STRING);

移除字段

实例化后,您可以移除必需或可选字段。

$formtest = new FormValidator( $required, $optional );

$formtest->removeRequired('user_email');
$formtest->removeOptional('family_name');

过滤结果:InputContainer

InputContainer 是一个 PSR-11 Container,并且实现了 ArrayAccess。

ArrayAccess

<?php
// Invocation returns InputContainer instance
$filtered_input = $formtest( $_POST );

// ArrayAccess: 
// If field not set, return values are null.
echo $filtered_input['foo'];
echo $filtered_input->offsetGet('foo');

简单的数组访问

<?php
// Invocation returns InputContainer instance
$filtered_input = $formtest( $_POST );

$input_array = $filtered_input->getArrayCopy();

ContainerInterface

<?php
use Germania\FormValidator\NotFoundException;
use Psr\Container\NotFoundExceptionInterface;

// Invocation returns InputContainer instance
$filtered_input = $formtest( $_POST );

try {
	echo $filtered_input->has('foo');
	echo $filtered_input->get('foo');
}
catch (NotFoundException $e) {
	// not found
}
catch (NotFoundExceptionInterface $e) {
	// not found
}

过滤结果:自定义InputContainer

FormValidator 类可选地接受一个Callable,它接受过滤后的输入。它应该返回一些有用的东西(例如默认的InputContainer)。

变体A:使用构造函数

// Setup the factory
$factory = function( $filtered_input ) {
    return new \ArrayObject( $filtered_input );
};

// Pass to the ctor
$formtest = new FormValidator( $required, $optional, $factory );

// Returns an ArrayObject
$filtered_input = $formtest( $_POST );

变体B:每次调用使用

// Setup as usual:
$formtest = new FormValidator( $required, $optional );
$filtered_input = $formtest( $_POST );

// While the above returns the usual InputContainer,
// this will return an ArrayObject:
$filtered_input = $formtest( $_POST, function( $filtered_input ) {
    return new \ArrayObject( $filtered_input );
});

问题

问题列表。

开发

$ git clone https://github.com/GermaniaKG/FormValidator.git
$ cd FormValidator
$ composer install

单元测试

可以将phpunit.xml.dist复制到phpunit.xml并根据需要修改,或者保持不变。运行PhpUnit测试或composer脚本如下:

$ composer test
# or
$ vendor/bin/phpunit