public function getChildInputFilter()
 {
     $filter = new BaseInputFilter();
     $foo = new Input();
     $foo->getFilterChain()->attachByName('stringtrim')->attachByName('alpha');
     $foo->getValidatorChain()->attach(new Validator\StringLength(3, 6));
     $bar = new Input();
     $bar->getFilterChain()->attachByName('stringtrim');
     $bar->getValidatorChain()->attach(new Validator\Digits());
     $baz = new Input();
     $baz->setRequired(false);
     $baz->getFilterChain()->attachByName('stringtrim');
     $baz->getValidatorChain()->attach(new Validator\StringLength(1, 6));
     $filter->add($foo, 'foo')->add($bar, 'bar')->add($baz, 'baz');
     return $filter;
 }
Пример #2
0
 /**
  * Add an input to the input filter
  *
  * @param  array|Traversable|InputInterface|InputFilterInterface $input
  * @param  null|string $name
  * @return InputFilter
  */
 public function add($input, $name = null)
 {
     if (is_array($input) || $input instanceof Traversable && !$input instanceof InputFilterInterface) {
         $factory = $this->getFactory();
         $input = $factory->createInput($input);
     }
     return parent::add($input, $name);
 }
Пример #3
0
 /**
  * Pre-process form: set id if needed and  and set
  */
 private function preProcessForm()
 {
     $xpath = new DOMXPath($this->document);
     $elements = $xpath->query('//input | //textarea | //div[@data-input-name]');
     /** @var DOMElement $element */
     foreach ($elements as $element) {
         // Set some basic vars
         $name = $element->getAttribute('name');
         if (!$name) {
             $name = $element->getAttribute('data-input-name');
         }
         if (!$name) {
             // At least a name is needed to submit a value.
             // Silently continue, might be a submit button.
             continue;
         }
         // Create an id if needed, this speeds up finding the element again
         $id = $element->getAttribute('id');
         if (!$id) {
             $id = md5(spl_object_hash($element));
             $element->setAttribute('id', $id);
         }
         $this->nameIdXref[$name] = $id;
         // Detect element type
         $type = $element->getAttribute('type');
         if ($element->tagName == 'textarea') {
             $type = 'textarea';
         }
         // Add validation
         if (isset($this->formElements[$type])) {
             $validator = new $this->formElements[$type]();
         } else {
             // Create a default validator
             $validator = new $this->formElements['text']();
         }
         if ($this->inputFilter->has($name)) {
             $input = $this->inputFilter->get($name);
         } else {
             // No input found for element, create a new one
             $input = new Input($name);
             // Enforce properties so the NotEmpty validator is automatically added,
             // we'll take care of this later.
             $input->setRequired(false);
             $input->setAllowEmpty(true);
             $this->inputFilter->add($input);
         }
         // Process element and attach filters and validators
         $validator($element, $input);
     }
 }
Пример #4
0
 /**
  * Merges the inputs from an InputFilter into the current one
  *
  * @param BaseInputFilter $inputFilter
  *
  * @return self
  */
 public function merge(BaseInputFilter $inputFilter)
 {
     foreach ($inputFilter->getInputs() as $name => $input) {
         $this->add($input, $name);
     }
     return $this;
 }
Пример #5
0
 /**
  * {@inheritDoc}
  *
  * @param bool $recursive
  */
 public function merge(BaseInputFilter $inputFilter, $recursive = false)
 {
     foreach ($inputFilter->getInputs() as $name => $input) {
         $this->add($input, $name, $recursive);
     }
     if ($inputFilter instanceof InputFilterInterface) {
         $this->getFilterChain()->merge($inputFilter->getFilterChain());
         $this->getValidatorChain()->merge($inputFilter->getValidatorChain());
     }
     return $this;
 }
Пример #6
0
 public function testNestedCollectionWithEmptyData()
 {
     $items_inputfilter = new BaseInputFilter();
     $items_inputfilter->add(new Input(), 'id')->add(new Input(), 'type');
     $items = new CollectionInputFilter();
     $items->setInputFilter($items_inputfilter);
     $groups_inputfilter = new BaseInputFilter();
     $groups_inputfilter->add(new Input(), 'group_class')->add($items, 'items');
     $groups = new CollectionInputFilter();
     $groups->setInputFilter($groups_inputfilter);
     $inputFilter = new BaseInputFilter();
     $inputFilter->add($groups, 'groups');
     $data = array('groups' => array(array('group_class' => 'bar', 'items' => array(array('id' => 100, 'type' => 'item-1'))), array('group_class' => 'biz', 'items' => array()), array('group_class' => 'bar', 'items' => array(array('id' => 200, 'type' => 'item-2'), array('id' => 300, 'type' => 'item-3'), array('id' => 400, 'type' => 'item-4')))));
     $inputFilter->setData($data);
     $inputFilter->isValid();
     $values = $inputFilter->getValues();
     $this->assertEquals($data, $values);
 }
Пример #7
0
 public function testGetRequiredNotEmptyValidationMessages()
 {
     $filter = new InputFilter();
     $foo = new Input();
     $foo->setRequired(true);
     $foo->setAllowEmpty(false);
     $filter->add($foo, 'foo');
     $data = array('foo' => null);
     $filter->setData($data);
     $this->assertFalse($filter->isValid());
     $messages = $filter->getMessages();
     $this->assertArrayHasKey('foo', $messages);
     $this->assertNotEmpty($messages['foo']);
 }
    public function testValidateUseExplodeAndInstanceOf()
    {
        $filter = new InputFilter();

        $input = new Input();
        $input->setRequired(true);

        $input->getValidatorChain()->attach(
            new \Zend\Validator\Explode(
                array(
                    'validator' => new \Zend\Validator\IsInstanceOf(
                        array(
                            'className' => 'Zend\InputFilter\Input'
                        )
                    )
                )
            )
        );

        $filter->add($input, 'example');

        $data = array(
            'example' => array(
                $input
            )
        );

        $filter->setData($data);
        $this->assertTrue($filter->isValid());

    }
use Zend\InputFilter\InputFilter;
use Zend\Validator;
use Zend\Filter;
fu::setup(function () {
    $collectionFilter = new CollectionUniqueInputFilter();
    $foo = new Input();
    $foo->getFilterChain()->attach(new Filter\StringTrim());
    $foo->getValidatorChain()->attach(new Validator\StringLength(3, 6));
    $bar = new Input();
    $bar->getFilterChain()->attach(new Filter\StringTrim());
    $bar->getValidatorChain()->attach(new Validator\Digits());
    $baz = new Input();
    $baz->setRequired(false);
    $baz->getFilterChain()->attach(new Filter\StringTrim());
    $baz->getValidatorChain()->attach(new Validator\StringLength(1, 6));
    $inputFilter = new BaseInputFilter();
    $inputFilter->add($foo, 'foo')->add($bar, 'bar')->add($baz, 'baz');
    $collectionFilter->setInputFilter($inputFilter);
    fu::fixture('collectionFilter', $collectionFilter);
    fu::fixture('inputFilter', $inputFilter);
});
fu::test('Test inputfilter validates on valid data', function () {
    $data = array(array('foo' => ' bazbat ', 'bar' => ' 12345 ', 'baz' => ''), array('foo' => ' bazbar ', 'bar' => ' 54321 ', 'baz' => ''));
    $expected = array(array('foo' => 'bazbat', 'bar' => '12345', 'baz' => ''), array('foo' => 'bazbar', 'bar' => '54321', 'baz' => ''));
    $collectionFilter = fu::fixture('collectionFilter');
    $collectionFilter->setData($data);
    fu::ok($collectionFilter->isValid(), 'Assert inputfilter is valid');
    fu::equal($expected, $collectionFilter->getValues(), 'Assert inputfilter returns expected values');
    $messages = $collectionFilter->getMessages();
    fu::ok(empty($messages), 'Assert inputfilter has no error messages');
});
Пример #10
0
 /**
  * @group 5638
  */
 public function testPopulateSupportsArrayInputEvenIfDataMissing()
 {
     $arrayInput = $this->getMock('Zend\\InputFilter\\ArrayInput');
     $arrayInput->expects($this->once())->method('setValue')->with(array());
     $filter = new InputFilter();
     $filter->add($arrayInput, 'arrayInput');
     $filter->setData(array('foo' => 'bar'));
 }
Пример #11
0
    public function testValidationMarksInputInvalidWhenRequiredAndAllowEmptyFlagIsFalse()
    {
        $filter = new InputFilter();

        $foo   = new Input();
        $foo->getValidatorChain()->addValidator(new Validator\StringLength(3, 5));
        $foo->setRequired(true);
        $foo->setAllowEmpty(false);

        $bar = new Input();
        $bar->getValidatorChain()->addValidator(new Validator\Digits());
        $bar->setRequired(true);

        $filter->add($foo, '')
               ->add($bar, 'bar');

        $data = array('bar' => 124);
        $filter->setData($data);

        $this->assertFalse($filter->isValid());
    }
Пример #12
0
 public function testGetInputs()
 {
     $filter = new InputFilter();
     $foo = new Input('foo');
     $bar = new Input('bar');
     $filter->add($foo);
     $filter->add($bar);
     $filters = $filter->getInputs();
     $this->assertCount(2, $filters);
     $this->assertEquals('foo', $filters['foo']->getName());
     $this->assertEquals('bar', $filters['bar']->getName());
 }