vendor/symfony/form/FormView.php line 22

  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <[email protected]>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\Form;
  11. use Symfony\Component\Form\Exception\BadMethodCallException;
  12. /**
  13.  * @author Bernhard Schussek <[email protected]>
  14.  *
  15.  * @implements \ArrayAccess<int|string, FormView>
  16.  * @implements \IteratorAggregate<int|string, FormView>
  17.  */
  18. class FormView implements \ArrayAccess\IteratorAggregate\Countable
  19. {
  20.     /**
  21.      * The variables assigned to this view.
  22.      */
  23.     public $vars = [
  24.         'value' => null,
  25.         'attr' => [],
  26.     ];
  27.     /**
  28.      * The parent view.
  29.      */
  30.     public $parent;
  31.     /**
  32.      * The child views.
  33.      *
  34.      * @var array<int|string, FormView>
  35.      */
  36.     public $children = [];
  37.     /**
  38.      * Is the form attached to this renderer rendered?
  39.      *
  40.      * Rendering happens when either the widget or the row method was called.
  41.      * Row implicitly includes widget, however certain rendering mechanisms
  42.      * have to skip widget rendering when a row is rendered.
  43.      */
  44.     private bool $rendered false;
  45.     private bool $methodRendered false;
  46.     public function __construct(self $parent null)
  47.     {
  48.         $this->parent $parent;
  49.     }
  50.     /**
  51.      * Returns whether the view was already rendered.
  52.      */
  53.     public function isRendered(): bool
  54.     {
  55.         if (true === $this->rendered || === \count($this->children)) {
  56.             return $this->rendered;
  57.         }
  58.         foreach ($this->children as $child) {
  59.             if (!$child->isRendered()) {
  60.                 return false;
  61.             }
  62.         }
  63.         return $this->rendered true;
  64.     }
  65.     /**
  66.      * Marks the view as rendered.
  67.      *
  68.      * @return $this
  69.      */
  70.     public function setRendered(): static
  71.     {
  72.         $this->rendered true;
  73.         return $this;
  74.     }
  75.     public function isMethodRendered(): bool
  76.     {
  77.         return $this->methodRendered;
  78.     }
  79.     public function setMethodRendered()
  80.     {
  81.         $this->methodRendered true;
  82.     }
  83.     /**
  84.      * Returns a child by name (implements \ArrayAccess).
  85.      *
  86.      * @param int|string $name The child name
  87.      */
  88.     public function offsetGet(mixed $name): self
  89.     {
  90.         return $this->children[$name];
  91.     }
  92.     /**
  93.      * Returns whether the given child exists (implements \ArrayAccess).
  94.      *
  95.      * @param int|string $name The child name
  96.      */
  97.     public function offsetExists(mixed $name): bool
  98.     {
  99.         return isset($this->children[$name]);
  100.     }
  101.     /**
  102.      * Implements \ArrayAccess.
  103.      *
  104.      * @throws BadMethodCallException always as setting a child by name is not allowed
  105.      */
  106.     public function offsetSet(mixed $namemixed $value): void
  107.     {
  108.         throw new BadMethodCallException('Not supported.');
  109.     }
  110.     /**
  111.      * Removes a child (implements \ArrayAccess).
  112.      *
  113.      * @param int|string $name The child name
  114.      */
  115.     public function offsetUnset(mixed $name): void
  116.     {
  117.         unset($this->children[$name]);
  118.     }
  119.     /**
  120.      * Returns an iterator to iterate over children (implements \IteratorAggregate).
  121.      *
  122.      * @return \ArrayIterator<int|string, FormView>
  123.      */
  124.     public function getIterator(): \ArrayIterator
  125.     {
  126.         return new \ArrayIterator($this->children);
  127.     }
  128.     public function count(): int
  129.     {
  130.         return \count($this->children);
  131.     }
  132. }