rollun-com / rollun-datahandler
Rollun zend-expressive 框架。开始开发应用仅需几秒钟!
Requires
- php: ^7.1
- ext-json: *
- http-interop/http-middleware: ^0.4.1
- rollun-com/rollun-callback: ^6.0
- rollun-com/rollun-datastore: ^6
- symfony/expression-language: ^5.0
- zendframework/zend-filter: ^2.8
- zendframework/zend-servicemanager: ^3.3
- zendframework/zend-validator: ^2.10
Requires (Dev)
- phpunit/phpunit: ^6.0.8
- squizlabs/php_codesniffer: ^3.3
- symfony/dotenv: ^4.1
- zendframework/zend-config-aggregator: ^1.1
This package is auto-updated.
Last update: 2024-08-26 17:01:28 UTC
README
《rollun-datahandler》库扩展了标准库 zendframework\zend-filter
、zendframework\zend-validator
和 symfony\expression-language
,同时还增加了处理器。
过滤器
过滤器扩展了标准库 zendframework\zend-filter
。
过滤器列表
- DuplicateSymbol - 将重复的符号(符号序列)替换为指定的符号(默认替换为重复的符号)
- Evaluation - 计算输入字符串上的表达式(表达式语言)并返回其值
- RemoveDigits - 删除字符串中的所有数字,保留一个空格('a1c' => 'a c')
- RqlReplace - 过滤器,将所有 rql 匹配项替换为指定的字符串
- SortSymbols - 对字符串中的符号进行排序(不考虑哪些符号)
- SortWords - 对字符串中的单词进行排序
处理器
处理器对输入数组执行某些操作。处理器的本质是处理数据。它可以返回未修改的数组,同时处理数据并对其执行某些操作:记录到日志、发送电子邮件等。
示例
$processor = new Concat([ 'columns' => [1, 2], 'delimiter' => '-', 'resultColumn' => 3, ]); var_dump($processor->process(['a', 'b'])); // displays ['a', 'b', 'a-b']
处理器列表
- Concat - 将数组的值连接并记录到同一数组的列中
- Evaluation - 对数组元素计算表达式(其中键是表达式中变量的名称,值是变量的值)并将结果记录到同一数组的列中
- FilterApplier - 将过滤器应用于指定的数组列
FilterApplier
示例
$processor = new FilterApplier($options); var_dump($processor->process(['1a2b3', 'b'])); // displays ['1a2b3', '321']
FilterApplier 的 $options
数组的示例。 有关如何使用工厂设置选项的详细信息。
$options = [ // Filters for applying // Key in array is a priority of filter 'filters' => [ 0 => [ 'service' => 'digits', ], 1 => [ 'service' => 'rqlReplace', 'options' => [ // optional 'pattern' => '123', 'replacement' => '321', ], ], ], 'argumentColumn' => 1, 'resultColumn' => 2, // optional (will save to argumentColumn) ];
所有处理器(包括 FilterApplier)都可以接受一个验证器作为第二个参数。验证器将接收到与处理器相同的数组。如果数组无效,则处理器不会处理它。
$validator = new EmailAddress(); $processor = new FilterApplier($options, $validator); var_dump($processor->process(['1a2b3', '123'])); // displays ['1a2b3', 'b']
为了验证器的正确工作,最好使用 ArrayAdapter 装饰器。它将验证器应用于指定的字段/字段。
$validator = ArrayAdapter([ 'columnsToValidate' => [1, 2], 'validator' => 'digits', ]); $processor = new FilterApplier($options, $validator); var_dump($processor->process(['1a2b3', '123'])); // displays ['1a2b3', '321']
验证器
验证器扩展了标准库 zendframework\zend-validator
。
验证器列表
- ArrayAdapter - 验证数组中的指定列
ArrayAdapter
$array1 = ['abcd', '123']; $array2 = ['321', '123']; $validator = new ArrayValidator([ 'columnsToValidate' => [1, 2], 'validator' => 'digits', ]); var_dump($validator->isValid($array1)); // false var_dump($validator->isValid($array2)); // true
如果需要为验证器提供额外的选项,可以通过 'validatorOptions'
键传递。 有关如何使用工厂设置选项的详细信息。
$validator = new ArrayValidator([ 'columnsToValidate' => [1, 2], 'validator' => 'inArray', 'validatorOptions' => [ 'haystack' => $array2 ], ]); var_dump($validator->isValid($array2)); // false
表达式语言(Expression Language)
扩展到 symfony\expression-language
库。ExpressionLanguage 组件可以编译和计算表达式。
示例
$expressionLanguage = new ExpressionLanguage(); var_dump($expressionLanguage->evaluate('1 + 2')); // displays 3 var_dump($expressionLanguage->compile('1 + 2')); // displays (1 + 2) // Array for variables in expression $values = [ 'a' => 2, 'b' => 5, ]; var_dump($expressionLanguage->evaluate('a * b'), $values); // displays 10 var_dump($expressionLanguage->compile('a * b'), $values); // displays (2 * 5)
表达式函数
Callback - 提供创建带有回调的 ExpressionFunction 的功能。此类函数可以执行,但不能编译。在尝试编译使用此函数的表达式时,将抛出异常。
$callback = function($value) { return $value . $value; }; $expressionFunction = new ExpressionFunction\Callback($callback, 'foo'); $expressionLanguage = new ExpressionLanguage(); $expressionLanguage->addFunction($expressionFunction); var_dump($expressionLanguage->evaluate("foo('a')")); // displays 'aa' var_dump($expressionLanguage->compile("foo('a')")); // exception will be thrown
表达式函数提供者
PluginExpressionFunctionProvider - 提供使用 AbstractPluginManager 创建 ExpressionFunctionProvider 的功能,指定服务列表和调用方法。
$pluginManager = new FilterPluginManager(new ServiceManager()); $services = ['digits', 'stringTrim']; $expressionFunctionProvider = new PluginExpressionFunctionProvider($pluginManager, $services, 'filter'); $expressionLanguage = new ExpressionLanguage(); $expressionLanguage->registerProvider($expressionFunctionProvider); var_dump($expressionLanguage->evaluate("digits('123abc')")); // displays '123' var_dump($expressionLanguage->compile("stringTrim(' ad ')")); //displays 'ad'
工厂
处理器、验证器和过滤器(以下称为“插件”)可以通过插件管理器创建,
$filterPluginManager = FilterPluginManager(new ServiceManager()); // Create filter using filter plugin options $filter = $filterPluginManager->get('pregReplace', [ 'pattern' => '/aaa/', 'replacement' => 'a', ]); var_dump(get_class($filter)); // Zend\Filter\PregReplace
这样以及通过容器直接。
$container = new ServiceManager(); $container->setService('config', [ 'filters' => [ 'abstract_factory_config' => [ SimpleFilterAbstractFactory::class => [ 'pregReplaceFilter' => [ 'class' => PregReplace::class, 'options' => [ 'pattern' => '/aaa/', 'replacement' => 'a', ], ] ] ] ] ]); $filterPluginManager = FilterPluginManager($container); $filter = $filterPluginManager->get('pregReplace'); var_dump(get_class($filter)); // Zend\Filter\PregReplace
如果为插件配置了设置,并且是通过容器配置和通过插件管理器创建时的 $options,则它们不应冲突,否则会抛出异常。
$container = new ServiceManager(); $container->setService('config', [ 'filters' => [ 'abstract_factory_config' => [ SimpleFilterAbstractFactory::class => [ 'pregReplaceFilter' => [ 'class' => PregReplace::class, 'options' => [ 'pattern' => '/aaa/', 'replacement' => 'a', ], ] ] ] ] ]); $filterPluginManager = FilterPluginManager($container); // Will be thrown exception $filter = $filterPluginManager->get('pregReplace', [ 'pattern' => '/aaa/', 'replacement' => 'a', ]);