mtymek / blast-input-filter
为Expressive应用程序配置基于设置的zend-validator、zend-filter和zend-inputfilter。
1.0.0
2017-05-15 17:28 UTC
Requires
Requires (Dev)
- php: ^5.6 | ^7.0
- malukenho/docheader: ^0.1.6
- phpunit/phpunit: ^5.3
- squizlabs/php_codesniffer: ^2.3
- zendframework/zend-servicemanager: ^2.7 | ^3.0
This package is auto-updated.
Last update: 2024-09-05 04:07:23 UTC
README
为Zend Expressive应用程序配置zend-validator
、zend-filter
和zend-inputfilter
。
此包提供工厂,允许使用配置定义自定义过滤器和服务端验证器。
return [ 'filters' => [ 'factories' => [ 'Foo' => FooFilterFactory::class, ], ], 'validators' => [ 'factories' => [ 'Bar' => BarValidatorFactory::class, ], ], ];
之后,它们可以在构建输入过滤器时直接使用。
$filter = $factory->createInputFilter( [ [ 'name' => 'name', 'filters' => [ ['name' => 'Foo'], ], 'validators' => [ ['name' => 'Bar'], ], ], ] ); return $filter;
安装
此包支持使用composer进行安装。
$ composer require mtymek/blast-input-filter
使用
定义您的自定义过滤器和验证器
blast-inputfilter
允许使用filters
和validators
键设置相应的插件管理器
return [ 'filters' => [ 'factories' => [ 'Foo' => FooFilterFactory::class, ], ], 'validators' => [ 'factories' => [ 'Bar' => BarValidatorFactory::class, ], ], ];
这完全类似于使用zend-mvc
,只是没有ZF模块管理器的性能损耗。
创建输入过滤器
创建输入过滤器和注入元素的方式有很多种。其中一种是通过使用__construct
方法创建所有输入并指定验证器
namespace App\InputFilter; use Zend\InputFilter\InputFilter; class ContactInputFilter extends InputFilter { public function __construct() { $this->add( [ 'name' => 'name', 'filters' => [ ['name' => 'Foo'], ], 'validators' => [ ['name' => 'Bar'], ], ] ); $this->add( [ 'name' => 'content', 'filters' => [ ['name' => 'StringTrim'], ], ] ); } }
为您的过滤器创建工厂
为了让自定义过滤器和验证器正常工作,您需要从服务容器中拉取Zend\InputFilter\Factory
并将其注入到您的输入过滤器中
namespace App\InputFilter; use Interop\Container\ContainerInterface; use Zend\InputFilter\Factory; class ContactInputFilterFactory { public function __invoke(ContainerInterface $container) { $inputFilter = new ContactForm(); $inputFilter->setFactory($container->get(Factory::class)); return $inputFilter; } }
请注意,您可以使用更通用的工厂实例化多个输入过滤器
namespace App\InputFilter; use Interop\Container\ContainerInterface; use Zend\InputFilter\Factory; class InputFilterFactory { public function __invoke(ContainerInterface $container, $requestedName) { $inputFilter = new $requestedName(); $inputFilter->setFactory($container->get(Factory::class)); return $inputFilter; } }