Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ZF2过滤选择设置而非空选项_Php_Zend Framework_Select_Filter_Zend Framework2 - Fatal编程技术网

Php ZF2过滤选择设置而非空选项

Php ZF2过滤选择设置而非空选项,php,zend-framework,select,filter,zend-framework2,Php,Zend Framework,Select,Filter,Zend Framework2,我的目的是过滤选择框是否有空选项以外的选项。 如果我将过滤器“required”设置为true,则在选择框不必为空的情况下,都会出现错误。 通过将“required”设置为false,我得到了一个有效的表单,但即使我没有在Select元素中做出选择。 除了空选项,还有其他方法检查其他选择吗 //class for creating a Fieldset class FieldsetCreate extends Fieldset implements InputFilterProviderInte

我的目的是过滤选择框是否有空选项以外的选项。 如果我将过滤器“required”设置为true,则在选择框不必为空的情况下,都会出现错误。 通过将“required”设置为false,我得到了一个有效的表单,但即使我没有在Select元素中做出选择。 除了空选项,还有其他方法检查其他选择吗

//class for creating a Fieldset
class FieldsetCreate extends Fieldset implements InputFilterProviderInterface
{
...
  public function getRoofProductsElement()
  {
     $element = new Select(ProductFormInterface::FIELD_ROOFPRODUCT);
     $element->setLabel('Set roof products');
     $element->setAttribute('id', ProductFormInterface::FIELD_ROOFPRODUCT);
     $element->setEmptyOption('Select...');
     $element->setValueOptions(array('1'=>'None', '2' => 'Is Roof'));
     $element->setAttribute('onchange', 'setRoofProductSelection(this);');

     return $element;
  }
...
   public function getInputFilterSpecification()
   {
     return array(
         array(
             'name' => ProductFormInterface::FIELD_TYPESELECTION,
             'required' => false,

         ),
         array(
             'name' => ProductFormInterface::FIELD_ROOFPRODUCT,
             'required' => false,
            'validators' => array(
                new \Zend\Validator\GreaterThan(array('min' => 0)),
             )
          ),
          array(
             'name' => ProductFormInterface::FIELD_MANUFACTURERS,
             'required' => false,
          )
       );
  }
}

//Form Factory to Set Fieldset To Form and return the form
class ProductTypeFormFactory extends ProductAbstractFormFactory 
implements FactoryInterface
{

   public function createService(ServiceLocatorInterface $serviceLocator)
   {
       $form = new ProductForm('productForm');
       $form->addCsrfElement();

       $service = $serviceLocator->get('Product\Service\Product');
       $form->
           add($this->createFieldsetCreate($service->fetchAllProductTypes()));
       $form->setInputFilter(new InputFilter());
       $form->setValidationGroup($this->createValidationGroup());
       return $form;
   }
}

//The Service with Method createProduct
class ProductService
   implements EventManagerAwareInterface, ProductServiceInterface
{
   public function createProduct($typeId, $manufacturerId, $isRoof, $form)
   {
      $formArray = array(
          ProductFormInterface::FIELD_TYPESELECTION => $typeId,
          ProductFormInterface::FIELD_MANUFACTURERS => $manufacturerId,
          ProductFormInterface::FIELD_ROOFPRODUCT => $isRoof

      );

      $form->setData($formArray); 
      if ($form->isValid()) {
          var_dump('VALID');
      } else {
          var_dump($form->getMessages());
      }
   }
这是我能给出的最短代码。
尽管我使用的是GreaterThan验证器,但是在rootproduct元素上保留空选项(0)是有效的,创建您自己的自定义验证器并在其中设置您的逻辑。在module/YourModule/src/YourModule/Form/Validator中,为自定义验证器创建一个类:

'validators' => array
                (
                    array
                    (
                        'name'    => 'YourModule\Form\Validator\CustomValidator',
                        'options' => array
                                     (
                                         'messages' => array
                                                       (
                                                           YourModule\Form\Validator\CustomValidator::INVALID => 'This is just invalid.',
                                                           YourModule\Form\Validator\CustomValidator::WRONG   => 'This is just wrong.',
                                                       )
                                     ),
                        'break_chain_on_failure' => true,
                    ),
                ),
CustomValidator.php
您可以阅读自定义验证器

源代码,希望它现在更好
'validators' => array
                (
                    array
                    (
                        'name'    => 'YourModule\Form\Validator\CustomValidator',
                        'options' => array
                                     (
                                         'messages' => array
                                                       (
                                                           YourModule\Form\Validator\CustomValidator::INVALID => 'This is just invalid.',
                                                           YourModule\Form\Validator\CustomValidator::WRONG   => 'This is just wrong.',
                                                       )
                                     ),
                        'break_chain_on_failure' => true,
                    ),
                ),