/** * Registers a new form element. * * @param \DeForm\Element\ElementInterface $element * @return self */ public function addElement(ElementInterface $element) { $name = $element->getName(); if (true === array_key_exists($name, $this->elements)) { throw new \LogicException(sprintf('Cannot set the element "%s" more than once (same name)', $name)); } $request_value = $this->request->get($name); $this->elements[$name] = $element; if (true === $this->canSetElementValue($element, $request_value)) { $element->setValue($request_value); } return $this; }
function it_should_validate_data_and_return_fail(ValidatorFactoryInterface $factory, ValidatorInterface $validator, ElementInterface $el) { $rules = ['foo' => 'required']; $values = ['foo' => '']; $errors = ['foo' => ['Foo element is required.']]; $elements = ['foo' => $el]; $factory->make($rules)->willReturn($validator); $validator->validate($values)->willReturn(false); $validator->getMessages()->willReturn($errors); $el->getName()->willReturn('foo'); $el->setInvalid(json_encode($errors['foo']))->shouldBeCalled(); $this->validate($rules, $values)->shouldReturn(false); $this->updateValidationStatus($elements); }
function let(Request $request, Validator $validator, ElementFactory $elementFactory, ParserFactoryInterface $parserFactory, NodeInterface $formNode, NodeInterface $textInput, NodeInterface $hiddenInput, ElementInterface $textElement, DocumentInterface $document, ParserInterface $parser) { $this->beConstructedWith($request, $validator, $elementFactory, $parserFactory); $parserFactory->createDocument($this->html)->willReturn($document); $parserFactory->createParser($document)->willReturn($parser); $parser->getFormNode()->willReturn($formNode); $parser->getElementsNodes()->willReturn($nodes = [$textInput]); $formNode->getAttribute('name')->willReturn($form_name = 'testform'); $formNode->createElement('input')->shouldBeCalled()->willReturn($hiddenInput); $hiddenInput->setAttribute('type', 'hidden')->shouldBeCalled(); $hiddenInput->setAttribute('value', $form_name)->shouldBeCalled(); $hiddenInput->setAttribute('name', DeForm::DEFORM_ID)->shouldBeCalled(); $formNode->appendChild($hiddenInput)->shouldBeCalled(); $textInput->getElementType()->willReturn('input_text'); $textElement->getName()->willReturn('foo'); $elementFactory->createFromNodes($nodes)->willReturn([$textElement]); }
function it_should_fill_the_form(Request $request, Element $el1, Element $el2) { $request->get(DeForm::DEFORM_ID)->willReturn('foo'); $request->get('field_1')->willReturn('bar'); $request->get('field_2')->willReturn(42); $el1->getName()->willReturn($field_1 = 'field_1'); $el1->isReadonly()->willReturn(false); $el1->setValue('bar')->shouldBeCalled(); $el2->getName()->willReturn($field_2 = 'field_2'); $el2->isReadonly()->willReturn(false); $el2->setValue(42)->shouldBeCalled(); $this->addElement($el1); $this->addElement($el2); $el1->setValue($new_value_field_1 = 'first')->shouldBeCalled(); $el2->setValue($new_value_field_2 = 'second')->shouldBeCalled(); $this->fill([$field_1 => $new_value_field_1, $field_2 => $new_value_field_2]); }