germania-kg / formvalidator
可用于验证和过滤用户输入,并提供方便的评估API。
1.5.1
2022-03-30 09:42 UTC
Requires
- php: ^5.6|^7.0|^8.0
- psr/container: ^1.0
- psr/http-message: ^1.0
- psr/log: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.0
- php-coveralls/php-coveralls: ^2.0
- phpspec/prophecy-phpunit: ^2.0
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^9.0
- spatie/phpunit-watcher: ^1.0
README
可用于验证和过滤用户输入,并提供方便的评估API。
使用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