/** * @return array[] */ public function getNestedValues() : array { $values = []; foreach ($this->data->getIndexes($this->key) as $index) { $key = $this->key . '[' . $index . ']'; if ($this->data->hasKey($key)) { $values[] = $this->data->getValue($key); } } return $values; }
public function unbind($value) : Data { if (null === $value) { return Data::none(); } return $this->wrappedMapping->unbind($value); }
public function testUnbind() { $data = Data::fromFlatArray(['foo' => 'bar']); $binder = $this->prophesize(FormatterInterface::class); $binder->unbind('foo', 'bar')->willReturn($data); $mapping = (new FieldMapping($binder->reveal()))->withPrefixAndRelativeKey('', 'foo'); $this->assertSame($data, $mapping->unbind('bar')); }
public function unbind($value) : Data { Assertion::isArray($value); $data = Data::none(); foreach ($value as $index => $individualValue) { $data = $data->merge($this->wrappedMapping->withPrefixAndRelativeKey($this->key, (string) $index)->unbind($individualValue)); } return $data; }
/** * {@inheritdoc} */ public function unbind(string $key, $value) : Data { Assertion::isInstanceOf($value, DateTimeInterface::class); $dateTime = $value->setTimezone($this->timeZone); if ((int) $dateTime->format('u') > 0) { return Data::fromFlatArray([$key => $dateTime->format('H:i:s.u')]); } return Data::fromFlatArray([$key => $dateTime->format('H:i:s')]); }
public function testBindEmptyStringValue() { $bindResult = (new BooleanFormatter())->bind('foo', Data::fromFlatArray(['foo' => ''])); $this->assertFalse($bindResult->isSuccess()); $this->assertCount(1, $bindResult->getFormErrorSequence()); $error = iterator_to_array($bindResult->getFormErrorSequence())[0]; $this->assertSame('foo', $error->getKey()); $this->assertSame('error.boolean', $error->getMessage()); }
public function testThrowErrorOnBindNonExistentKey() { $bindResult = (new TextFormatter())->bind('foo', Data::fromFlatArray([])); $this->assertFalse($bindResult->isSuccess()); $this->assertCount(1, $bindResult->getFormErrorSequence()); $error = iterator_to_array($bindResult->getFormErrorSequence())[0]; $this->assertSame('foo', $error->getKey()); $this->assertSame('error.required', $error->getMessage()); }
public function testBindInvalidData() { $data = Data::none(); $mapping = $this->prophesize(MappingInterface::class); $mapping->bind($data)->willReturn(BindResult::fromFormErrors(new FormError('', 'foo')))->shouldBeCalled(); $form = (new Form($mapping->reveal()))->bind($data); $this->assertTrue($form->hasErrors()); $this->assertSame('foo', iterator_to_array($form->getGlobalErrors())[0]->getMessage()); $this->expectException(AssertionFailedException::class); $form->getValue(); }
public function testUnbindValidValues() { $wrappedMapping = $this->prophesize(MappingInterface::class); $wrappedMapping->unbind('baz')->willReturn(Data::fromFlatArray(['foo[bar][0]' => 'baz'])); $wrappedMapping->unbind('bat')->willReturn(Data::fromFlatArray(['foo[bar][1]' => 'bat'])); $wrappedMapping->withPrefixAndRelativeKey('foo[bar]', '0')->willReturn($wrappedMapping->reveal()); $wrappedMapping->withPrefixAndRelativeKey('foo[bar]', '1')->willReturn($wrappedMapping->reveal()); $mapping = (new RepeatedMapping($wrappedMapping->reveal()))->withPrefixAndRelativeKey('foo', 'bar'); $data = $mapping->unbind(['baz', 'bat']); $this->assertSame('baz', $data->getValue('foo[bar][0]')); $this->assertSame('bat', $data->getValue('foo[bar][1]')); }
public function testGetNestedValues() { $field = new Field('foo', '', new FormErrorSequence(), Data::fromFlatArray(['foo[0]' => 'bar0', 'foo[1]' => 'bar1', 'foo[1][baz]' => 'bar2'])); $this->assertSame(['bar0', 'bar1'], $field->getNestedValues()); }
/** * {@inheritdoc} */ public function unbind(string $key, $value) : Data { Assertion::integer($value); return Data::fromFlatArray([$key => (string) $value]); }
/** * {@inheritdoc} */ public function unbind(string $key, $value) : Data { Assertion::string($value); Assertion::numeric($value); return Data::fromFlatArray([$key => $value]); }
public function unbind($value) : Data { $data = Data::none(); $unapply = $this->unapply; $values = $unapply($value); Assertion::isArray($values); foreach ($this->mappings as $key => $mapping) { Assertion::keyExists($values, $key); $data = $data->merge($mapping->unbind($values[$key])); } return $data; }
public function testCustomAttribute() { $helper = new InputCheckbox(); $this->assertSame('<input data-foo="bar" type="checkbox" id="input.foo" name="foo" value="true">', $helper(new Field('foo', '', new FormErrorSequence(), Data::none()), ['data-foo' => 'bar'])); }
private function getMockedMapping(string $key, string $value = null, Data $data = null, $success = true) : MappingInterface { $mapping = $this->prophesize(MappingInterface::class); if (null !== $value) { $mapping->unbind($value)->willReturn(Data::fromFlatArray([$key => $value])); } if (null !== $value && null !== $data) { $mapping->bind($data)->willReturn($success ? BindResult::fromValue($value) : BindResult::fromFormErrors(new FormError($key, $value))); } $mapping->withPrefixAndRelativeKey('', $key)->willReturn($mapping->reveal()); return $mapping->reveal(); }
public function testUnbindNotNullValue() { $wrappedMapping = $this->prophesize(MappingInterface::class); $wrappedMapping->unbind('foo')->willReturn(Data::fromFlatArray(['foo' => 'bar'])); $mapping = new OptionalMapping($wrappedMapping->reveal()); $this->assertSame('bar', $mapping->unbind('foo')->getValue('foo')); }
public function testCustomAttribute() { $helper = new Textarea(); $this->assertSame('<textarea data-foo="bar" id="input.foo" name="foo">bar&</textarea>', $helper(new Field('foo', 'bar&', new FormErrorSequence(), Data::none()), ['data-foo' => 'bar'])); }
public function getField(string $key) : Field { return new Field($key, $this->data->getValue($key, ''), $this->errors->collect($key), $this->data); }
public function testIsEmptyReturnsFalseWithData() { $data = Data::fromFlatArray(['foo' => 'bar']); $this->assertFalse($data->isEmpty()); }
public function testCustomAttribute() { $helper = new InputPassword(); $this->assertSame('<input data-foo="bar" type="password" id="input.foo" name="foo">', $helper(new Field('foo', 'bar&', new FormErrorSequence(), Data::none()), ['data-foo' => 'bar'])); }
/** * {@inheritdoc} */ public function unbind(string $key, $value) : Data { Assertion::boolean($value); return Data::fromFlatArray([$key => $value ? 'true' : 'false']); }
public function testOptGroups() { $helper = new Select(); $this->assertSame("<select id=\"input.foo\" name=\"foo\"><option value=\"foo\">bar</option>\n" . "<optgroup label=\"baz\"><option value=\"bat\">a</option></optgroup></select>", $helper(new Field('foo', '', new FormErrorSequence(), Data::none()), ['foo' => 'bar', 'baz' => ['bat' => 'a']])); }