Пример #1
0
 /**
  * @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;
 }
Пример #2
0
 public function unbind($value) : Data
 {
     if (null === $value) {
         return Data::none();
     }
     return $this->wrappedMapping->unbind($value);
 }
Пример #3
0
 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'));
 }
Пример #4
0
 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;
 }
Пример #5
0
 /**
  * {@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')]);
 }
Пример #6
0
 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());
 }
Пример #7
0
 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());
 }
Пример #8
0
 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();
 }
Пример #9
0
 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]'));
 }
Пример #10
0
 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());
 }
Пример #11
0
 /**
  * {@inheritdoc}
  */
 public function unbind(string $key, $value) : Data
 {
     Assertion::integer($value);
     return Data::fromFlatArray([$key => (string) $value]);
 }
Пример #12
0
 /**
  * {@inheritdoc}
  */
 public function unbind(string $key, $value) : Data
 {
     Assertion::string($value);
     Assertion::numeric($value);
     return Data::fromFlatArray([$key => $value]);
 }
Пример #13
0
 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;
 }
Пример #14
0
 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']));
 }
Пример #15
0
 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();
 }
Пример #16
0
 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'));
 }
Пример #17
0
 public function testCustomAttribute()
 {
     $helper = new Textarea();
     $this->assertSame('<textarea data-foo="bar" id="input.foo" name="foo">bar&amp;</textarea>', $helper(new Field('foo', 'bar&', new FormErrorSequence(), Data::none()), ['data-foo' => 'bar']));
 }
Пример #18
0
 public function getField(string $key) : Field
 {
     return new Field($key, $this->data->getValue($key, ''), $this->errors->collect($key), $this->data);
 }
Пример #19
0
 public function testIsEmptyReturnsFalseWithData()
 {
     $data = Data::fromFlatArray(['foo' => 'bar']);
     $this->assertFalse($data->isEmpty());
 }
Пример #20
0
 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']));
 }
Пример #21
0
 /**
  * {@inheritdoc}
  */
 public function unbind(string $key, $value) : Data
 {
     Assertion::boolean($value);
     return Data::fromFlatArray([$key => $value ? 'true' : 'false']);
 }
Пример #22
0
 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']]));
 }