<?php
/**
* User: delboy1978uk
* Date: 04/12/2016
* Time: 23:13
*/
namespace Del\Form\Renderer\Field;
use Del\Form\Field\ArrayValueInterface;
use Del\Form\Field\FieldInterface;
use Del\Form\Traits\HasDomTrait;
use DOMDocument;
use DOMElement;
abstract class AbstractFieldRender implements FieldRendererInterface
{
use HasDomTrait;
/**
* @param DOMDocument $dom
* @return DOMElement
*/
public function render(DOMDocument $dom, FieldInterface $field)
{
$this->setDom($dom);
$element = $this->createElementFromField($field);
return $this->renderBlock($field, $element);
}
/**
* @param FieldInterface $field
* @return DOMElement
*/
public function createElementFromField(FieldInterface $field)
{
$element = $this->createElement($field->getTag());
foreach ($field->getAttributes() as $key => $value) {
$element = $this->setAttribute($field, $element, $key, $value);
}
return $element;
}
/**
* @param FieldInterface $field
* @param DOMElement $element
* @param $key
* @param $value
* @return DOMElement
*/
private function setAttribute(FieldInterface $field, DOMElement $element, $key, $value)
{
if ($field instanceof ArrayValueInterface && $key == 'value') {
return $element;
}
$element->setAttribute($key, $value);
return $element;
}
abstract public function renderBlock(FieldInterface $field, DOMElement $element);
}
|