Commit 91a43363 authored by catch's avatar catch
Browse files

Issue #3187074 by longwave, daffie, Gábor Hojtsy, alexpott: [Symfony 5]...

Issue #3187074 by longwave, daffie, Gábor Hojtsy, alexpott: [Symfony 5] Services are private by default
parent 663c57bf
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -88,7 +88,11 @@ public function register($id, $class = null) {
    if (strtolower($id) !== $id) {
      throw new \InvalidArgumentException("Service ID names must be lowercase: $id");
    }
    return parent::register($id, $class);
    $definition = new Definition($class);
    // As of Symfony 5.2 all services are private by default, but in Drupal
    // services are still public by default.
    $definition->setPublic(TRUE);
    return $this->setDefinition($id, $definition);
  }

  /**
@@ -111,7 +115,8 @@ public function setDefinition($id, Definition $definition) {
    // removes services marked as private from the container even if they are
    // also marked as public. Drupal requires services that are public to
    // remain in the container and not be removed.
    if ($definition->isPublic()) {
    if ($definition->isPublic() && $definition->isPrivate()) {
      @trigger_error('Not marking service definitions as public is deprecated in drupal:9.2.0 and is required in drupal:10.0.0. Call $definition->setPublic(TRUE) before calling ::setDefinition(). See https://www.drupal.org/node/3194517', E_USER_DEPRECATED);
      $definition->setPrivate(FALSE);
    }
    return $definition;
+8 −2
Original line number Diff line number Diff line
@@ -150,8 +150,11 @@ private function parseDefinition($id, $service, $file)
        }

        if (isset($service['alias'])) {
            $public = !array_key_exists('public', $service) || (bool) $service['public'];
            $alias = $this->container->setAlias($id, new Alias($service['alias'], $public));
            $alias = $this->container->setAlias($id, new Alias($service['alias']));

            if (array_key_exists('public', $service)) {
                $alias->setPublic($service['public']);
            }

            if (array_key_exists('deprecated', $service)) {
                $alias->setDeprecated(true, $service['deprecated']);
@@ -185,6 +188,9 @@ private function parseDefinition($id, $service, $file)
        if (isset($service['public'])) {
            $definition->setPublic($service['public']);
        }
        else {
            $definition->setPublic(true);
        }

        if (isset($service['abstract'])) {
            $definition->setAbstract($service['abstract']);
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ class UpdateServiceProvider implements ServiceProviderInterface, ServiceModifier
  public function register(ContainerBuilder $container) {
    $definition = new Definition('Drupal\Core\Cache\NullBackend', ['null']);
    $definition->setDeprecated(TRUE, 'The "%service_id%\" service is deprecated. While updating Drupal all caches use \Drupal\Core\Update\UpdateBackend. See https://www.drupal.org/node/3066407');
    $definition->setPublic(TRUE);
    $container->setDefinition('cache.null', $definition);

    // Decorate the cache factory in order to use
+1 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ public function register(ContainerBuilder $container) {
        new Reference('plugin.manager.layout_builder.section_storage'),
      ]);
      $definition->addTag('event_subscriber');
      $definition->setPublic(TRUE);
      $container->setDefinition('layout_builder.get_block_dependency_subscriber', $definition);
    }
    if (isset($modules['serialization'])) {
+8 −1
Original line number Diff line number Diff line
@@ -19,25 +19,32 @@ class RegisterSerializationClassesCompilerPassTest extends UnitTestCase {
   */
  public function testEncoders() {
    $container = new ContainerBuilder();
    $container->setDefinition('serializer', new Definition(Serializer::class, [[], []]));

    $serializer_definition = new Definition(Serializer::class, [[], []]);
    $serializer_definition->setPublic(TRUE);
    $container->setDefinition('serializer', $serializer_definition);

    $encoder_1_definition = new Definition('TestClass');
    $encoder_1_definition->addTag('encoder', ['format' => 'xml']);
    $encoder_1_definition->addTag('_provider', ['provider' => 'test_provider_a']);
    $encoder_1_definition->setPublic(TRUE);
    $container->setDefinition('encoder_1', $encoder_1_definition);

    $encoder_2_definition = new Definition('TestClass');
    $encoder_2_definition->addTag('encoder', ['format' => 'json']);
    $encoder_2_definition->addTag('_provider', ['provider' => 'test_provider_a']);
    $encoder_2_definition->setPublic(TRUE);
    $container->setDefinition('encoder_2', $encoder_2_definition);

    $encoder_3_definition = new Definition('TestClass');
    $encoder_3_definition->addTag('encoder', ['format' => 'hal_json']);
    $encoder_3_definition->addTag('_provider', ['provider' => 'test_provider_b']);
    $encoder_3_definition->setPublic(TRUE);
    $container->setDefinition('encoder_3', $encoder_3_definition);

    $normalizer_1_definition = new Definition('TestClass');
    $normalizer_1_definition->addTag('normalizer');
    $normalizer_1_definition->setPublic(TRUE);
    $container->setDefinition('normalizer_1', $normalizer_1_definition);

    $compiler_pass = new RegisterSerializationClassesCompilerPass();
Loading