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; }
/** * 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); }
/** * 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); } }
/** * 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; }
/** * {@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; }
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); }
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'); });
/** * @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')); }
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()); }
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()); }