doctrine-mezzio-module/src/Form/Element/ObjectMultiCheckbox.php
2021-02-20 20:55:17 +01:00

81 lines
1.8 KiB
PHP

<?php
declare(strict_types=1);
namespace DoctrineMezzioModule\Form\Element;
use Laminas\Form\Element\MultiCheckbox;
use Laminas\Stdlib\ArrayUtils;
use Traversable;
use function array_map;
use function is_array;
class ObjectMultiCheckbox extends MultiCheckbox
{
protected Proxy $proxy;
public function getProxy(): Proxy
{
if (null === $this->proxy) {
$this->proxy = new Proxy();
}
return $this->proxy;
}
/**
* @param array|Traversable $options
* @return self
*/
public function setOptions($options): ObjectMultiCheckbox
{
$this->getProxy()->setOptions($options);
return parent::setOptions($options);
}
/**
* @param string $key
* @param mixed $value
* @return self
*/
public function setOption($key, $value): ObjectMultiCheckbox
{
$this->getProxy()->setOptions([$key => $value]);
return parent::setOption($key, $value);
}
/**
* {@inheritDoc}
*/
public function setValue($value)
{
if ($value instanceof Traversable) {
$value = ArrayUtils::iteratorToArray($value);
} elseif ($value === null) {
return parent::setValue([]);
} elseif (! is_array($value)) {
$value = (array) $value;
}
return parent::setValue(array_map([$this->getProxy(), 'getValue'], $value));
}
/**
* {@inheritDoc}
*/
public function getValueOptions(): array
{
if (! empty($this->valueOptions)) {
return $this->valueOptions;
}
$proxyValueOptions = $this->getProxy()->getValueOptions();
if (! empty($proxyValueOptions)) {
$this->setValueOptions($proxyValueOptions);
}
return $this->valueOptions;
}
}