Zend framework2 Zend框架2过滤器

Zend framework2 Zend框架2过滤器,zend-framework2,zend-form,Zend Framework2,Zend Form,当我使用InputFilter时,在int filters $inputFilter->add($factory->createInput(array( 'name' => 'id', 'required' => true, 'filters' => array( array('name' => 'Int'), ), ))); 您需要使用allowEmpty属性来强制InputFilter组件拒绝空值

当我使用
InputFilter
时,在
int filters

$inputFilter->add($factory->createInput(array(
    'name'     => 'id',
    'required' => true,
    'filters'  => array(
        array('name' => 'Int'),
    ),
)));

您需要使用
allowEmpty
属性来强制InputFilter组件拒绝空值

$inputFilter->add($factory->createInput(array(
    'name'     => 'id',
    'required' => true,
    'allowEmpty' => false, // <--- Look ma
    'filters'  => array(
        array('name' => 'Int'),
    ),
)));
$inputFilter->add($factory->createInput(数组)(
'name'=>'id',
“必需”=>true,
'allowEmpty'=>false,//数组(
数组('name'=>'Int'),
),
)));

您确定要使用
Int
输入过滤器吗?它的功能是。其代码只是:

public function filter($value)
{
    return (int) ((string) $value);
}
它将值转换为字符串。如果您的值是空字符串,它会将其转换为0,这就是为什么之后在验证程序的执行过程中,required不起作用(它检查0)

在我看来,由于输入的名称
id
,您只想强制用户输入必须是数字的内容。您可以这样做:

    $inputFilter->add( $factory->createInput( array(
        'name'      => 'id',
        'required'  => true,
        'validators' => array(
            array( 'name' => 'Digits' ),
        )
    ) );

你能在问题中加入InputFilter的用法吗?我使用它=>使用Zend\InputFilter\Factory作为InputFactory;使用Zend\InputFilter\InputFilter;使用Zend\InputFilter\InputFilterAwareInterface;使用Zend\InputFilter\InputFilterInterface;使用Zend\Validator\NotEmpty;使用Zend\Validator\StringLength;使用Zend\Validator\EmailAddress;使用Zend\Validator\Between;我将数字与模式属性'attributes'=>array('type'=>'text','pattern'=>'[1-9]*','id'=>'prix',)一起使用,这些属性没有任何效果。允许的选项是。
Digits
验证器最终调用了
Digits
过滤器,该过滤器使用三种固定模式(您的模式永远不会被使用)。它们都接受输入的0值(由
Int
过滤器从空字符串生成)。