ZF2:文件集验证不起作用

拉维

我的ZF2表单字段集验证不起作用,但是表单验证正在起作用我尝试了相同的表单验证,但是这些都不起作用。

我已经InputFilterProviderInterface在字段集中实现了,但是没有用。

下面是我的代码:

class CompanyCreditLimitFieldset extends Fieldset implements InputFilterProviderInterface {

    protected $_curency = null;
    protected $inputFilter;

    public function __construct($name = null, $options = array()) {
        $this
                ->setHydrator(new ClassMethodsHydrator(false))
                ->setObject(new \Application\Entity\PhvCompanyCurrencyCredit())
        ;

        parent::__construct($name, $options);



        $this->add(array(
            'name' => 'credit_limit',
            'type' => 'text',
            'attributes' => array(
                'id' => 'credit_limit',
                'class' => 'form-control maxlength-simple credit_limit',
                'placeholder' => 'Credit Limit'
            ),
            'options' => array(
                'label' => 'Credit Limit',
            )
        ));

        $this->add(array(
            'name' => 'mininum_balance_limit',
            'type' => 'text',
            'attributes' => array(
                'id' => 'mininum_balance_limit',
                'class' => 'form-control maxlength-simple mininum_balance_limit',
                'placeholder' => 'Minimum Balance Limit'
            ),
            'options' => array(
                'label' => 'Minimum Balance Limit',
            )
        ));
    }


    public function getInputFilterSpecification() {
        return array(
            'credit_limit' => array(
                'filters' => array(
                    array('name' => 'StringTrim')
                ),
                'validators' => array(
                    array('name' => 'NotEmpty')
                )
            ),
            'mininum_balance_limit' => array(
                'filters' => array(
                    array('name' => 'StringTrim')
                ),
                'validators' => array(
                    array('name' => 'NotEmpty')
                )
            ),

        );
    }

}

形式

class AddCompanyForm extends AbstractForm implements InputFilterAwareInterface {

    protected $inputFilter;
    protected $dbAdapter;
    private $_country = null;

    public function __construct($id = null, $name = null) {
        $this->entity = new \Application\Entity\PhvCompany();
        parent::__construct($name);

        $this
                ->setHydrator(new ClassMethodsHydrator(false))
                ->setObject(new \Application\Entity\PhvCompany())
        ;

        $this->__addElements();
    }

    private function __addElements() {
        $this->setAttribute('method', 'post');

        $this->add(array(
            'type' => 'Zend\Form\Element\Collection',
            'name' => 'creditlimitfieldset',
            'options' => array(
                'label' => 'Credit Limits',
                'count' => 3,
                'allow_add' => true,
                'should_create_template' => true,
                'template_placeholder' => '__placeholder__',
                'target_element' => array(
                'type' => 'Application\Form\Fieldset\CompanyCreditLimitFieldset',
                ),
            ),
//             'type' => 'Application\Form\Fieldset\CompanyCreditLimitFieldset',
//             'options' => array('label' => 'Credit Limits',)
        ));


        $this->add(array(
            'name' => 'submit',
            'attributes' => array(
                'type' => 'submit',
                'value' => 'Save',
                'class' => 'btn btn-inline btn-secondary btn-rounded'
            )
        ));




    }

    public function setDbAdapter($dbAdapter) {
        $this->dbAdapter = $dbAdapter;
    }

    public function setInputFilter(InputFilterInterface $inputFilter) {
        throw new \Exception("Not used");
    }

}

您能帮我解决这个问题吗?

亚当·伦德里根(Adam Lundrigan)

坦率地说,这种类型的问题是为什么我总是构建一个与Form结构匹配的单独InputFilter层次结构,而不是依靠ZF的“魔术”输入过滤器构建器。这是一篇很棒的文章,介绍了如何做到这一点:

以这种方式使用集合时,您需要为每个Collection表单元素将CollectionInputFilter添加到表单的输入过滤器中。该类是完全未记录的IIRC,但是您可以在此处找到示例,在此处找到该类


我写了一个简短的脚本,复制了您所看到的内容:

<?php
<<<CONFIG
packages:
    - "zendframework/zend-form: ^2.0"
    - "zendframework/zend-servicemanager: ^3.0"
    - "zendframework/zend-hydrator: ^2.0"
CONFIG;
// Run this script with Melody: http://melody.sensiolabs.org/


use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;
use Zend\Form\Form;

class ChildFieldset extends Fieldset implements InputFilterProviderInterface
{
    public function __construct($name = null, $options = array())
    {
    parent::__construct($name, $options);

    $this->add(array(
        'name' => 'fieldA',
        'type' => 'text',
        'attributes' => array(
            'id' => 'fieldA',
        ),
        'options' => array(
            'label' => 'Field A',
        )
    ));
    }

    public function getInputFilterSpecification()
    {
    return array(
        'fieldA' => array(
            'required'          => true,
            'allow_empty'       => false,
            'continue_if_empty' => false,
            'filters' => array(
                array('name' => 'StringTrim')
            ),
            'validators' => array(
                array('name' => 'NotEmpty')
            )
        ),
    );
    }
}

class ParentForm extends Form
{
    public function __construct($name, array $options)
    {
    parent::__construct($name, $options);

    $this->add(array(
        'type' => 'Zend\Form\Element\Collection',
        'name' => 'childForms',
        'options' => array(
            'label' => 'Child Forms',
            'allow_add' => true,
            'should_create_template' => true,
            'template_placeholder' => '__placeholder__',
            'target_element' => array(
                'type' => 'ChildFieldset',
            ),
        ),
    ));

    $this->add(array(
        'name' => 'submit',
        'attributes' => array(
            'type' => 'submit',
            'value' => 'Save',
        )
    ));
    }
}

$form = new ParentForm('foo', []);

$data = [];
$form->setData($data);
echo "Dataset: " . print_r($data, true) . "\n";
echo "Result: " . ($form->isValid() ? 'valid' : 'invalid');
echo "\n\n--------------------------------------\n\n";


$data = [
    'childForms' => []
];
$form->setData($data);
echo "Dataset: " . print_r($data, true) . "\n";
echo "Result: " . ($form->isValid() ? 'valid' : 'invalid');
echo "\n\n--------------------------------------\n\n";


$data = [
    'childForms' => [
    ['fieldA' => ''],
    ],
];
$form->setData($data);
echo "Dataset: " . print_r($data, true) . "\n";
echo "Result: " . ($form->isValid() ? 'valid' : 'invalid') . "\n\n";
echo "\n\n--------------------------------------\n\n";


$data = [
    'childForms' => [
    ['fieldA' => 'fff'],
    ],
];
$form->setData($data);
echo "Dataset: " . print_r($data, true) . "\n";
echo "Result: " . ($form->isValid() ? 'valid' : 'invalid') . "\n\n";

当我运行它(PHP 7.0.9)时,我得到了:

Dataset: Array
(
)

Result: valid
(wrong)

--------------------------------------

Dataset: Array
(
    [childForms] => Array
    (
    )

)

Result: valid
(wrong)

--------------------------------------

Dataset: Array
(
    [childForms] => Array
    (
        [0] => Array
            (
                [fieldA] => 
            )

    )

)

Result: invalid
(correct!)


--------------------------------------

Dataset: Array
(
    [childForms] => Array
    (
        [0] => Array
            (
                [fieldA] => fff
            )

    )

)

Result: valid
(correct!)

仅当数据中存在键的完整层次结构时,才触发子字段集上的输入筛选器。本身不是错误,但不是您期望发生的事情。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ZF2 deleteAction不起作用

来自分类Dev

为什么phpUnit测试不起作用?ZF2

来自分类Dev

ZF2 redirect()在标头位置起作用时不起作用

来自分类Dev

ZF2转换器在控制器中不起作用?

来自分类Dev

ZF2表单HTML5数字元素不起作用

来自分类Dev

ZF2语言系统在本地服务器上不起作用

来自分类Dev

带有前缀的ZF2路由在默认情况下不起作用

来自分类Dev

Zf2 子路由在多一个子节点时不起作用。

来自分类Dev

当我在zf2中发送电子邮件时,翻译不起作用

来自分类Dev

文件上传ZF2

来自分类Dev

jQuery文件大小验证不起作用

来自分类Dev

ZF2/Doctrine2 - 未验证字段集,数据始终有效

来自分类Dev

ZF2学说-字段集绑定

来自分类Dev

zf2会话验证失败

来自分类Dev

ZF2嵌套数据验证

来自分类Dev

使用字段集或集合时的ZF2验证器上下文

来自分类Dev

Angular 2表单验证不起作用

来自分类Dev

ZF2:嵌套字段集;结合和水合作用

来自分类Dev

yii2文件扩展名验证不起作用

来自分类Dev

zf2验证:如何验证相关字段?

来自分类Dev

批处理文件集变量不起作用

来自分类Dev

视频文件上的Laravel验证不起作用

来自分类Dev

laravel 4 docx文件验证不起作用

来自分类Dev

程序生成的KML文件可以验证,但不起作用

来自分类Dev

laravel 4 docx文件验证不起作用

来自分类Dev

视频文件上的Laravel验证不起作用

来自分类Dev

多文件上传验证javascript如果语句不起作用

来自分类Dev

带有验证的 Django 文件上传不起作用

来自分类Dev

JSON验证不起作用?