1 | <?php |
||
19 | abstract class AbstractFormRenderer implements FormRendererInterface |
||
20 | { |
||
21 | /** @var DOMDocument $dom */ |
||
22 | protected $dom; |
||
23 | |||
24 | /** @var DomElement $form */ |
||
25 | protected $form; |
||
26 | |||
27 | /** @var bool $displayErrors */ |
||
28 | protected $displayErrors; |
||
29 | |||
30 | /** @var ErrorRendererInterface $errorRenderer */ |
||
31 | protected $errorRenderer; |
||
32 | |||
33 | /** @var DomElement $label The label element*/ |
||
34 | protected $label; |
||
35 | |||
36 | /** @var DomElement $element the field element */ |
||
37 | protected $element; |
||
38 | |||
39 | /** @var DomElement $errors The error block html*/ |
||
40 | protected $errors; |
||
41 | |||
42 | /** @var DomElement $block The containing html block */ |
||
43 | protected $block; |
||
44 | |||
45 | /** @var FieldInterface $field The current field being processed */ |
||
46 | protected $field; |
||
47 | |||
48 | 23 | public function __construct() |
|
54 | |||
55 | /** |
||
56 | * @param FormInterface $form |
||
57 | * @param bool $displayErrors |
||
58 | * @return string |
||
59 | */ |
||
60 | 10 | public function render(FormInterface $form, $displayErrors = true) |
|
71 | |||
72 | /** |
||
73 | * @param FormInterface $form |
||
74 | */ |
||
75 | 10 | private function setFormAttributes(FormInterface $form) |
|
76 | { |
||
77 | 10 | $attributes = $form->getAttributes(); |
|
78 | 10 | foreach ($attributes as $key => $value) { |
|
79 | 10 | $this->form->setAttribute($key, $value); |
|
80 | 10 | } |
|
81 | |||
82 | // set Id as name or method as post if not set |
||
83 | 10 | $method = $this->getMethod($form); |
|
84 | 10 | $id = $this->getId($form); |
|
85 | |||
86 | 10 | $this->form->setAttribute('id', $id); |
|
87 | 10 | $this->form->setAttribute('method', $method); |
|
88 | 10 | } |
|
89 | |||
90 | /** |
||
91 | * @param FormInterface $form |
||
92 | * @return string |
||
93 | */ |
||
94 | 10 | private function getMethod(FormInterface $form) |
|
98 | |||
99 | /** |
||
100 | * @param FormInterface $form |
||
101 | * @return string |
||
102 | */ |
||
103 | 10 | private function getId(FormInterface $form) |
|
107 | |||
108 | 10 | private function processFields(FieldCollection $fields) |
|
109 | { |
||
110 | 10 | $fields->rewind(); |
|
111 | 10 | while ($fields->valid()) { |
|
112 | 9 | $this->block = $this->dom->createElement('div'); |
|
113 | 9 | $this->field = $fields->current(); |
|
114 | 9 | $this->label = $this->renderFieldLabel(); |
|
115 | 9 | $this->element = $this->field->getRenderer()->render($this->dom, $this->field); |
|
116 | 8 | $this->errors = $this->field->isValid() ? null : $this->renderError(); |
|
117 | 8 | $this->block = $this->renderFieldBlock(); |
|
118 | 8 | $this->form->appendChild($this->block); |
|
119 | 8 | $fields->next(); |
|
120 | 8 | } |
|
121 | 9 | $fields->rewind(); |
|
122 | 9 | } |
|
123 | |||
124 | |||
125 | |||
126 | /** |
||
127 | * @return \DOMElement|null |
||
128 | */ |
||
129 | 5 | public function renderError() |
|
130 | { |
||
131 | 5 | $errorBlock = null; |
|
132 | 5 | if (!$this->field->isValid() && $this->displayErrors === true) { |
|
133 | 3 | $this->block->setAttribute('class', 'has-error '); |
|
134 | 3 | $errorBlock = $this->errorRenderer->render($this->field); |
|
135 | 3 | } |
|
136 | 5 | return $errorBlock; |
|
137 | } |
||
138 | |||
139 | /** |
||
140 | * @return \DOMElement |
||
141 | */ |
||
142 | 9 | protected function createLabelElement() |
|
148 | |||
149 | } |