FestinHegre/vendor/symfony/form/Button.php
2024-09-26 17:26:04 +02:00

370 lines
7.7 KiB
PHP

<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Form;
use Symfony\Component\Form\Exception\AlreadySubmittedException;
use Symfony\Component\Form\Exception\BadMethodCallException;
use Symfony\Component\Form\Exception\TransformationFailedException;
use Symfony\Component\PropertyAccess\PropertyPathInterface;
/**
* A form button.
*
* @author Bernhard Schussek <bschussek@gmail.com>
*
* @implements \IteratorAggregate<string, FormInterface>
*/
class Button implements \IteratorAggregate, FormInterface
{
private ?FormInterface $parent = null;
private bool $submitted = false;
/**
* Creates a new button from a form configuration.
*/
public function __construct(
private FormConfigInterface $config,
) {
}
/**
* Unsupported method.
*/
public function offsetExists(mixed $offset): bool
{
return false;
}
/**
* Unsupported method.
*
* This method should not be invoked.
*
* @throws BadMethodCallException
*/
public function offsetGet(mixed $offset): FormInterface
{
throw new BadMethodCallException('Buttons cannot have children.');
}
/**
* Unsupported method.
*
* This method should not be invoked.
*
* @throws BadMethodCallException
*/
public function offsetSet(mixed $offset, mixed $value): void
{
throw new BadMethodCallException('Buttons cannot have children.');
}
/**
* Unsupported method.
*
* This method should not be invoked.
*
* @throws BadMethodCallException
*/
public function offsetUnset(mixed $offset): void
{
throw new BadMethodCallException('Buttons cannot have children.');
}
public function setParent(?FormInterface $parent): static
{
if ($this->submitted) {
throw new AlreadySubmittedException('You cannot set the parent of a submitted button.');
}
$this->parent = $parent;
return $this;
}
public function getParent(): ?FormInterface
{
return $this->parent;
}
/**
* Unsupported method.
*
* This method should not be invoked.
*
* @throws BadMethodCallException
*/
public function add(string|FormInterface $child, ?string $type = null, array $options = []): static
{
throw new BadMethodCallException('Buttons cannot have children.');
}
/**
* Unsupported method.
*
* This method should not be invoked.
*
* @throws BadMethodCallException
*/
public function get(string $name): FormInterface
{
throw new BadMethodCallException('Buttons cannot have children.');
}
/**
* Unsupported method.
*/
public function has(string $name): bool
{
return false;
}
/**
* Unsupported method.
*
* This method should not be invoked.
*
* @throws BadMethodCallException
*/
public function remove(string $name): static
{
throw new BadMethodCallException('Buttons cannot have children.');
}
public function all(): array
{
return [];
}
public function getErrors(bool $deep = false, bool $flatten = true): FormErrorIterator
{
return new FormErrorIterator($this, []);
}
/**
* Unsupported method.
*
* This method should not be invoked.
*
* @return $this
*/
public function setData(mixed $modelData): static
{
// no-op, called during initialization of the form tree
return $this;
}
/**
* Unsupported method.
*/
public function getData(): mixed
{
return null;
}
/**
* Unsupported method.
*/
public function getNormData(): mixed
{
return null;
}
/**
* Unsupported method.
*/
public function getViewData(): mixed
{
return null;
}
/**
* Unsupported method.
*/
public function getExtraData(): array
{
return [];
}
/**
* Returns the button's configuration.
*/
public function getConfig(): FormConfigInterface
{
return $this->config;
}
/**
* Returns whether the button is submitted.
*/
public function isSubmitted(): bool
{
return $this->submitted;
}
/**
* Returns the name by which the button is identified in forms.
*/
public function getName(): string
{
return $this->config->getName();
}
/**
* Unsupported method.
*/
public function getPropertyPath(): ?PropertyPathInterface
{
return null;
}
/**
* Unsupported method.
*
* @throws BadMethodCallException
*/
public function addError(FormError $error): static
{
throw new BadMethodCallException('Buttons cannot have errors.');
}
/**
* Unsupported method.
*/
public function isValid(): bool
{
return true;
}
/**
* Unsupported method.
*/
public function isRequired(): bool
{
return false;
}
public function isDisabled(): bool
{
if ($this->parent?->isDisabled()) {
return true;
}
return $this->config->getDisabled();
}
/**
* Unsupported method.
*/
public function isEmpty(): bool
{
return true;
}
/**
* Unsupported method.
*/
public function isSynchronized(): bool
{
return true;
}
/**
* Unsupported method.
*/
public function getTransformationFailure(): ?TransformationFailedException
{
return null;
}
/**
* Unsupported method.
*
* @throws BadMethodCallException
*/
public function initialize(): static
{
throw new BadMethodCallException('Buttons cannot be initialized. Call initialize() on the root form instead.');
}
/**
* Unsupported method.
*
* @throws BadMethodCallException
*/
public function handleRequest(mixed $request = null): static
{
throw new BadMethodCallException('Buttons cannot handle requests. Call handleRequest() on the root form instead.');
}
/**
* Submits data to the button.
*
* @return $this
*
* @throws AlreadySubmittedException if the button has already been submitted
*/
public function submit(array|string|null $submittedData, bool $clearMissing = true): static
{
if ($this->submitted) {
throw new AlreadySubmittedException('A form can only be submitted once.');
}
$this->submitted = true;
return $this;
}
public function getRoot(): FormInterface
{
return $this->parent ? $this->parent->getRoot() : $this;
}
public function isRoot(): bool
{
return null === $this->parent;
}
public function createView(?FormView $parent = null): FormView
{
if (null === $parent && $this->parent) {
$parent = $this->parent->createView();
}
$type = $this->config->getType();
$options = $this->config->getOptions();
$view = $type->createView($this, $parent);
$type->buildView($view, $this, $options);
$type->finishView($view, $this, $options);
return $view;
}
/**
* Unsupported method.
*/
public function count(): int
{
return 0;
}
/**
* Unsupported method.
*/
public function getIterator(): \EmptyIterator
{
return new \EmptyIterator();
}
}