Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Form.php
Go to the documentation of this file.
1 <?php
7 namespace Magento\Framework\Data;
8 
10 use Magento\Framework\Data\Form\Element\Collection as ElementCollection;
11 use Magento\Framework\Data\Form\Element\CollectionFactory as ElementCollectionFactory;
16 
21 class Form extends \Magento\Framework\Data\Form\AbstractForm
22 {
28  protected $_allElements;
29 
35  protected $_elementsIndex;
36 
40  protected $formKey;
41 
45  protected static $_defaultElementRenderer;
46 
50  protected static $_defaultFieldsetRenderer;
51 
56 
63  public function __construct(
64  Factory $factoryElement,
65  ElementCollectionFactory $factoryCollection,
67  $data = []
68  ) {
69  parent::__construct($factoryElement, $factoryCollection, $data);
70  $this->_allElements = $this->_factoryCollection->create(['container' => $this]);
71  $this->formKey = $formKey;
72  }
73 
78  public static function setElementRenderer(RendererInterface $renderer = null)
79  {
80  self::$_defaultElementRenderer = $renderer;
81  }
82 
87  public static function setFieldsetRenderer(RendererInterface $renderer = null)
88  {
89  self::$_defaultFieldsetRenderer = $renderer;
90  }
91 
96  public static function setFieldsetElementRenderer(RendererInterface $renderer = null)
97  {
98  self::$_defaultFieldsetElementRenderer = $renderer;
99  }
100 
104  public static function getElementRenderer()
105  {
107  }
108 
112  public static function getFieldsetRenderer()
113  {
115  }
116 
120  public static function getFieldsetElementRenderer()
121  {
123  }
124 
130  public function getHtmlAttributes()
131  {
132  return ['id', 'name', 'method', 'action', 'enctype', 'class', 'onsubmit', 'target'];
133  }
134 
142  public function addElement(AbstractElement $element, $after = false)
143  {
144  $this->checkElementId($element->getId());
145  parent::addElement($element, $after);
146  $this->addElementToCollection($element);
147  return $this;
148  }
149 
156  protected function _elementIdExists($elementId)
157  {
158  return isset($this->_elementsIndex[$elementId]);
159  }
160 
166  {
167  $this->_elementsIndex[$element->getId()] = $element;
168  $this->_allElements->add($element);
169  return $this;
170  }
171 
177  public function checkElementId($elementId)
178  {
179  if ($this->_elementIdExists($elementId)) {
180  throw new \InvalidArgumentException(
181  'An element with a "' . $elementId . '" ID already exists.'
182  );
183  }
184  return true;
185  }
186 
190  public function getForm()
191  {
192  return $this;
193  }
194 
201  public function getElement($elementId)
202  {
203  if ($this->_elementIdExists($elementId)) {
204  return $this->_elementsIndex[$elementId];
205  }
206  return null;
207  }
208 
213  public function setValues($values)
214  {
215  foreach ($this->_allElements as $element) {
216  if (isset($values[$element->getId()])) {
217  $element->setValue($values[$element->getId()]);
218  } else {
219  $element->setValue(null);
220  }
221  }
222  return $this;
223  }
224 
229  public function addValues($values)
230  {
231  if (!is_array($values)) {
232  return $this;
233  }
234  foreach ($values as $elementId => $value) {
235  $element = $this->getElement($elementId);
236  if ($element) {
237  $element->setValue($value);
238  }
239  }
240  return $this;
241  }
242 
249  public function addFieldNameSuffix($suffix)
250  {
251  foreach ($this->_allElements as $element) {
252  $name = $element->getName();
253  if ($name) {
254  $element->setName($this->addSuffixToName($name, $suffix));
255  }
256  }
257  return $this;
258  }
259 
265  public function addSuffixToName($name, $suffix)
266  {
267  if (!$name) {
268  return $suffix;
269  }
270  $vars = explode('[', $name);
271  $newName = $suffix;
272  foreach ($vars as $index => $value) {
273  $newName .= '[' . $value;
274  if ($index == 0) {
275  $newName .= ']';
276  }
277  }
278  return $newName;
279  }
280 
285  public function removeField($elementId)
286  {
287  if ($this->_elementIdExists($elementId)) {
288  unset($this->_elementsIndex[$elementId]);
289  }
290  return $this;
291  }
292 
298  {
299  $this->setData('field_container_id_prefix', $prefix);
300  return $this;
301  }
302 
306  public function getFieldContainerIdPrefix()
307  {
308  return $this->getData('field_container_id_prefix');
309  }
310 
314  public function toHtml()
315  {
316  Profiler::start('form/toHtml');
317  $html = '';
318  $useContainer = $this->getUseContainer();
319  if ($useContainer) {
320  $html .= '<form ' . $this->serialize($this->getHtmlAttributes()) . '>';
321  $html .= '<div>';
322  if (strtolower($this->getData('method')) == 'post') {
323  $html .= '<input name="form_key" type="hidden" value="' . $this->formKey->getFormKey() . '" />';
324  }
325  $html .= '</div>';
326  }
327 
328  foreach ($this->getElements() as $element) {
329  $html .= $element->toHtml();
330  }
331 
332  if ($useContainer) {
333  $html .= '</form>';
334  }
335  Profiler::stop('form/toHtml');
336  return $html;
337  }
338 
342  public function getHtml()
343  {
344  return $this->toHtml();
345  }
346 }
checkElementId($elementId)
Definition: Form.php:177
$suffix
Definition: name.phtml:27
getData($key='', $index=null)
Definition: DataObject.php:119
getElement($elementId)
Definition: Form.php:201
static $_defaultElementRenderer
Definition: Form.php:45
$values
Definition: options.phtml:88
static setFieldsetElementRenderer(RendererInterface $renderer=null)
Definition: Form.php:96
static getFieldsetRenderer()
Definition: Form.php:112
addElementToCollection($element)
Definition: Form.php:165
$prefix
Definition: name.phtml:25
static setElementRenderer(RendererInterface $renderer=null)
Definition: Form.php:78
$value
Definition: gender.phtml:16
removeField($elementId)
Definition: Form.php:285
static getElementRenderer()
Definition: Form.php:104
static $_defaultFieldsetElementRenderer
Definition: Form.php:55
setFieldContainerIdPrefix($prefix)
Definition: Form.php:297
__construct(Factory $factoryElement, ElementCollectionFactory $factoryCollection, FormKey $formKey, $data=[])
Definition: Form.php:63
addSuffixToName($name, $suffix)
Definition: Form.php:265
static getFieldsetElementRenderer()
Definition: Form.php:120
serialize($keys=[], $valueSeparator='=', $fieldSeparator=' ', $quote='"')
addFieldNameSuffix($suffix)
Definition: Form.php:249
addElement(AbstractElement $element, $after=false)
Definition: Form.php:142
setData($key, $value=null)
Definition: DataObject.php:72
static setFieldsetRenderer(RendererInterface $renderer=null)
Definition: Form.php:87
static $_defaultFieldsetRenderer
Definition: Form.php:50
_elementIdExists($elementId)
Definition: Form.php:156
$index
Definition: list.phtml:44
if(!isset($_GET['name'])) $name
Definition: log.php:14
$element
Definition: element.phtml:12