123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- <?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\BadMethodCallException;
- /**
- * @author Bernhard Schussek <bschussek@gmail.com>
- */
- class FormView implements \ArrayAccess, \IteratorAggregate, \Countable
- {
- /**
- * The variables assigned to this view.
- */
- public $vars = [
- 'value' => null,
- 'attr' => [],
- ];
- /**
- * The parent view.
- */
- public $parent;
- /**
- * The child views.
- *
- * @var FormView[]
- */
- public $children = [];
- /**
- * Is the form attached to this renderer rendered?
- *
- * Rendering happens when either the widget or the row method was called.
- * Row implicitly includes widget, however certain rendering mechanisms
- * have to skip widget rendering when a row is rendered.
- *
- * @var bool
- */
- private $rendered = false;
- private $methodRendered = false;
- public function __construct(self $parent = null)
- {
- $this->parent = $parent;
- }
- /**
- * Returns whether the view was already rendered.
- *
- * @return bool Whether this view's widget is rendered
- */
- public function isRendered()
- {
- if (true === $this->rendered || 0 === \count($this->children)) {
- return $this->rendered;
- }
- foreach ($this->children as $child) {
- if (!$child->isRendered()) {
- return false;
- }
- }
- return $this->rendered = true;
- }
- /**
- * Marks the view as rendered.
- *
- * @return $this
- */
- public function setRendered()
- {
- $this->rendered = true;
- return $this;
- }
- /**
- * @return bool
- */
- public function isMethodRendered()
- {
- return $this->methodRendered;
- }
- public function setMethodRendered()
- {
- $this->methodRendered = true;
- }
- /**
- * Returns a child by name (implements \ArrayAccess).
- *
- * @param string $name The child name
- *
- * @return self The child view
- */
- public function offsetGet($name)
- {
- return $this->children[$name];
- }
- /**
- * Returns whether the given child exists (implements \ArrayAccess).
- *
- * @param string $name The child name
- *
- * @return bool Whether the child view exists
- */
- public function offsetExists($name)
- {
- return isset($this->children[$name]);
- }
- /**
- * Implements \ArrayAccess.
- *
- * @throws BadMethodCallException always as setting a child by name is not allowed
- */
- public function offsetSet($name, $value)
- {
- throw new BadMethodCallException('Not supported.');
- }
- /**
- * Removes a child (implements \ArrayAccess).
- *
- * @param string $name The child name
- */
- public function offsetUnset($name)
- {
- unset($this->children[$name]);
- }
- /**
- * Returns an iterator to iterate over children (implements \IteratorAggregate).
- *
- * @return \ArrayIterator<string, FormView> The iterator
- */
- public function getIterator()
- {
- return new \ArrayIterator($this->children);
- }
- /**
- * Implements \Countable.
- *
- * @return int The number of children views
- */
- public function count()
- {
- return \count($this->children);
- }
- }
|