vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/FormPass.php line 14

Open in your IDE?
  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\Bundle\FrameworkBundle\DependencyInjection\Compiler;
  11. @trigger_error(sprintf('The %s class is deprecated since Symfony 3.3 and will be removed in 4.0. Use Symfony\Component\Form\DependencyInjection\FormPass instead.'FormPass::class), \E_USER_DEPRECATED);
  12. use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
  13. use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;
  14. use Symfony\Component\DependencyInjection\ContainerBuilder;
  15. use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
  16. /**
  17.  * Adds all services with the tags "form.type" and "form.type_guesser" as
  18.  * arguments of the "form.extension" service.
  19.  *
  20.  * @author Bernhard Schussek <[email protected]>
  21.  *
  22.  * @deprecated since version 3.3, to be removed in 4.0. Use FormPass in the Form component instead.
  23.  */
  24. class FormPass implements CompilerPassInterface
  25. {
  26.     use PriorityTaggedServiceTrait;
  27.     public function process(ContainerBuilder $container)
  28.     {
  29.         if (!$container->hasDefinition('form.extension')) {
  30.             return;
  31.         }
  32.         $definition $container->getDefinition('form.extension');
  33.         // Builds an array with fully-qualified type class names as keys and service IDs as values
  34.         $types = [];
  35.         foreach ($container->findTaggedServiceIds('form.type') as $serviceId => $tag) {
  36.             $serviceDefinition $container->getDefinition($serviceId);
  37.             if (!$serviceDefinition->isPublic()) {
  38.                 $serviceDefinition->setPublic(true);
  39.             }
  40.             // Support type access by FQCN
  41.             $types[$serviceDefinition->getClass()] = $serviceId;
  42.         }
  43.         $definition->replaceArgument(1$types);
  44.         $typeExtensions = [];
  45.         foreach ($this->findAndSortTaggedServices('form.type_extension'$container) as $reference) {
  46.             $serviceId = (string) $reference;
  47.             $serviceDefinition $container->getDefinition($serviceId);
  48.             if (!$serviceDefinition->isPublic()) {
  49.                 $serviceDefinition->setPublic(true);
  50.             }
  51.             $tag $serviceDefinition->getTag('form.type_extension');
  52.             if (isset($tag[0]['extended_type'])) {
  53.                 $extendedType $tag[0]['extended_type'];
  54.             } else {
  55.                 throw new InvalidArgumentException(sprintf('Tagged form type extension must have the extended type configured using the extended_type/extended-type attribute, none was configured for the "%s" service.'$serviceId));
  56.             }
  57.             $typeExtensions[$extendedType][] = $serviceId;
  58.         }
  59.         $definition->replaceArgument(2$typeExtensions);
  60.         // Find all services annotated with "form.type_guesser"
  61.         $guessers array_keys($container->findTaggedServiceIds('form.type_guesser'));
  62.         foreach ($guessers as $serviceId) {
  63.             $serviceDefinition $container->getDefinition($serviceId);
  64.             if (!$serviceDefinition->isPublic()) {
  65.                 $serviceDefinition->setPublic(true);
  66.             }
  67.         }
  68.         $definition->replaceArgument(3$guessers);
  69.     }
  70. }