ZF2中的Strokerform多选字段验证

时间:2014-06-13 10:16:24

标签: php forms validation zend-framework2

我在ZF2应用程序中设置了一个表单,并且我已将Strokerformhttps://github.com/bramstroker/zf2-form)验证配置为大部分工作。问题是我有一个多选字段(加上Chosen库(http://harvesthq.github.io/chosen/)),每当我尝试提交表单时,我会收到一次错误消息:The input was not found in the haystack

我为该字段编写了一个自定义验证器,它扩展了InArray验证器:

<?php

namespace Vacations\Validator;

use Zend\Validator\InArray;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class Recipients extends InArray implements ServiceLocatorAwareInterface
{    

protected $services;
protected $options;

public function setServiceLocator(ServiceLocatorInterface $serviceLocator)
{
    $this->services = $serviceLocator;
}

public function getServiceLocator()
{
    return $this->services;
}

public function __construct($options = null)
{

    $this->options = $options;

    $this->setServiceLocator($options['serviceLocator']);

    $table = $this->services->get('Vacations\Model\ManagerTable');

    $select = $table->getTableGateway()->select();
    $array = array_column($select->toArray(), 'id');

    $options = $options + array('haystack' => $array);

    parent::__construct($options);
}

}

将其添加为表单的过滤器:

$inputFilter->add($factory->createInput(array(
                'name' => 'recipients',
                'required' => true,
                'filters' => array(
                ),
                'validators' => array(
                    new Recipients( array(
                        'model' => 'ManagerTable',
                        'serviceLocator' => $this->getServiceLocator()
                    )),
        )));

有任何想法如何设置Strokerform以使用我从验证程序中的数据库获取的信息来验证发送的数据,或者根本禁用此字段的验证?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

我是StrokerForm的开发人员,我现在没有时间专注于您的特定问题。

目前您可以跳过自动生成元素的jquery验证规则,如下所示。您应该在元素上设置此选项,而不是在inputFilter上。

$recipients->setOption('strokerform-exclude', true);

Als看到manual

现在,您可以将自己的验证逻辑或规则添加到jquery验证收件人字段。