neo4j-php / neo4j-symfony

Symfony Bundle for the Neo4j Graph Database
MIT License
78 stars 41 forks source link

Service creates as private #55

Open glembus opened 5 years ago

glembus commented 5 years ago

Hello, A have received deprecation message The "neo4j.entity_manager" service is private, checking for its existence is deprecated since Symfony 3.2 and will fail in 4.0.. As I understood when sets alias for default manager it sets with private true but default service creates as not private. Message fires from Neo4jBundle::boot(). Here it is private. Maybe I doing something wrong.

I have changed $container->setAlias('neo4j.entity_manager', 'neo4j.entity_manager.default')` to

$id = new Alias($container->normalizeId('neo4j.entity_manager.default'), true);
$container->setAlias('neo4j.entity_manager', $id);

that help to set Alias as not private. But debug still tell that service is private..

 php bin/console debug:container neo4j.entity_manager

 // This service is an alias for the service neo4j.entity_manager.default                                               

Information for Service "neo4j.entity_manager.default"
======================================================

 ---------------- ------------------------------------ 
  Option           Value                               
 ---------------- ------------------------------------ 
  Service ID       neo4j.entity_manager.default        
  Class            GraphAware\Neo4j\OGM\EntityManager  
  Tags             -                                   
  Public           no                                  
  Synthetic        no                                  
  Lazy             no                                  
  Shared           yes                                 
  Abstract         no                                  
  Autowired        no                                  
  Autoconfigured   no                                  
 ---------------- ------------------------------------ 

Maybe I'm doing something wrong? I just add it and all tests fired deprecations

glembus commented 5 years ago

That helps me resolve deprecation firing Neo4jExtension::handleEntityMangers line 140 I add $definition->setPublic(true); But why that helps? In my case should be used ChildDefinition::class and it used but when creating alias were used properties from Definition::class ant service sets as public and private.

Nyholm commented 5 years ago

That is correct. All services should be private my default. That is symfony's best practice since 4.0.

Use dependency injection instead of using the container directly.

Nyholm commented 5 years ago

Oh I see. The bundle itself is using the container here: https://github.com/neo4j-contrib/neo4j-symfony/blob/master/Neo4jBundle.php

This is indeed an issue.

glembus commented 5 years ago

I'm not understand in what way service have changed his state on setAlias() but before this row service have internal properties setted

$private = false;
$public = true;

After setting alias for service it change state to

$private = true;
$public = true;

Maybe this can help. And maybe this bag not related to bundle.

glembus commented 5 years ago

I think maybe need change logic when was checks if manager is configured. Doctrine creates some parameter to resolve this. As temporary solution maybe do same thing? What you think about this?