doctrine-mezzio-module/src/Form/Element/ObjectMultiCheckbox.php

81 lines
1.8 KiB
PHP
Raw Normal View History

2021-01-10 19:19:37 +01:00
<?php
2021-02-20 20:55:17 +01:00
declare(strict_types=1);
2021-01-10 19:19:37 +01:00
namespace DoctrineMezzioModule\Form\Element;
use Laminas\Form\Element\MultiCheckbox;
use Laminas\Stdlib\ArrayUtils;
use Traversable;
2021-02-20 20:55:17 +01:00
use function array_map;
use function is_array;
2021-01-10 19:19:37 +01:00
class ObjectMultiCheckbox extends MultiCheckbox
{
2021-02-20 20:55:17 +01:00
protected Proxy $proxy;
2021-01-10 19:19:37 +01:00
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);
2021-02-20 20:55:17 +01:00
} elseif ($value === null) {
2021-01-10 19:19:37 +01:00
return parent::setValue([]);
} elseif (! is_array($value)) {
2021-02-20 20:55:17 +01:00
$value = (array) $value;
2021-01-10 19:19:37 +01:00
}
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;
}
}