vendor/symfony/form/FormTypeGuesserChain.php line 47

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  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\UnexpectedTypeException;
  12. use Symfony\Component\Form\Guess\Guess;
  13. class FormTypeGuesserChain implements FormTypeGuesserInterface
  14. {
  15.     private $guessers = [];
  16.     /**
  17.      * @param FormTypeGuesserInterface[] $guessers
  18.      *
  19.      * @throws UnexpectedTypeException if any guesser does not implement FormTypeGuesserInterface
  20.      */
  21.     public function __construct(iterable $guessers)
  22.     {
  23.         foreach ($guessers as $guesser) {
  24.             if (!$guesser instanceof FormTypeGuesserInterface) {
  25.                 throw new UnexpectedTypeException($guesser'Symfony\Component\Form\FormTypeGuesserInterface');
  26.             }
  27.             if ($guesser instanceof self) {
  28.                 $this->guessers array_merge($this->guessers$guesser->guessers);
  29.             } else {
  30.                 $this->guessers[] = $guesser;
  31.             }
  32.         }
  33.     }
  34.     /**
  35.      * {@inheritdoc}
  36.      */
  37.     public function guessType($class$property)
  38.     {
  39.         return $this->guess(function ($guesser) use ($class$property) {
  40.             return $guesser->guessType($class$property);
  41.         });
  42.     }
  43.     /**
  44.      * {@inheritdoc}
  45.      */
  46.     public function guessRequired($class$property)
  47.     {
  48.         return $this->guess(function ($guesser) use ($class$property) {
  49.             return $guesser->guessRequired($class$property);
  50.         });
  51.     }
  52.     /**
  53.      * {@inheritdoc}
  54.      */
  55.     public function guessMaxLength($class$property)
  56.     {
  57.         return $this->guess(function ($guesser) use ($class$property) {
  58.             return $guesser->guessMaxLength($class$property);
  59.         });
  60.     }
  61.     /**
  62.      * {@inheritdoc}
  63.      */
  64.     public function guessPattern($class$property)
  65.     {
  66.         return $this->guess(function ($guesser) use ($class$property) {
  67.             return $guesser->guessPattern($class$property);
  68.         });
  69.     }
  70.     /**
  71.      * Executes a closure for each guesser and returns the best guess from the
  72.      * return values.
  73.      *
  74.      * @param \Closure $closure The closure to execute. Accepts a guesser
  75.      *                          as argument and should return a Guess instance
  76.      */
  77.     private function guess(\Closure $closure): ?Guess
  78.     {
  79.         $guesses = [];
  80.         foreach ($this->guessers as $guesser) {
  81.             if ($guess $closure($guesser)) {
  82.                 $guesses[] = $guess;
  83.             }
  84.         }
  85.         return Guess::getBestGuess($guesses);
  86.     }
  87. }