我在ZF2应用程序中设置了一个表单,并且我已将Strokerform
(https://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
以使用我从验证程序中的数据库获取的信息来验证发送的数据,或者根本禁用此字段的验证?
提前谢谢!
答案 0 :(得分:0)
我是StrokerForm
的开发人员,我现在没有时间专注于您的特定问题。
目前您可以跳过自动生成元素的jquery验证规则,如下所示。您应该在元素上设置此选项,而不是在inputFilter上。
$recipients->setOption('strokerform-exclude', true);
Als看到manual。
现在,您可以将自己的验证逻辑或规则添加到jquery验证收件人字段。