When I try to inject a service in my Symfony 4.4.25 Bundle (with Akeneo) I encounter a very strange behavior.Defining a mapped variable in the Bundle Config without having the variable in __construct() throws a fail. Adding the variable throws another strange failure
If I define my service like this:
services: acme_category_builder.event_subscriber.category_builder: class: Acme\Bundle\CategoryBuilderBundle\AcmeCategoryBuilderBundle arguments: $productModelRepository: '@pim_catalog.repository.product_model' tags: ['kernel.event_subscriber']
or like this:
services: acme_category_builder.event_subscriber.category_builder: class: Acme\Bundle\CategoryBuilderBundle\AcmeCategoryBuilderBundle arguments: - '@pim_catalog.repository.product_model' tags: ['kernel.event_subscriber']
with this constructor:
public function __construct(){}
I get with first the Error that my constructor is missing the $productModelRepository
.
Invalid service "acme_category_builder.event_subscriber.category_builder": method "Acme\Bundle\CategoryBuilderBundle\AcmeCategoryBuilderBundle::__construct()" has no argument named "$productModelRepository". Check your service definition.
and with second the PHP Fatal Error
from below
If i add it like this in the constructor:
public function __construct($productModelRepository){}
i get the failure, that nothing was passed as Argument
PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to functionAcme\Bundle\CategoryBuilderBundle\AcmeCategoryBuilderBundle::__construct(), 0 passed in /home/Workspace/Akeneo/pim/src/Kernel.php on line 36 and exactly 1 expected in /home/Workspace/Akeneo/pim/vendor/acme/category-builder-bundle/src/AcmeCategoryBuilderBundle.php:39
however if i add a type hint (which was my first guess that could be missing, i retrieve the same error.
use Akeneo\Pim\Enrichment\Component\Product\Repository\ProductModelRepositoryInterface;public function __construct(ProductModelRepositoryInterface $productModelRepository){}
How can this be explained? first it wants to pass a argument but cant, then it has to pass a argument and wont?