mtymek/blast-input-filter

为Expressive应用程序配置基于设置的zend-validator、zend-filter和zend-inputfilter。

1.0.0 2017-05-15 17:28 UTC

This package is auto-updated.

Last update: 2024-09-05 04:07:23 UTC


README

Build Status

为Zend Expressive应用程序配置zend-validatorzend-filterzend-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允许使用filtersvalidators键设置相应的插件管理器

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;
    }
}