Injecting Services into a Service
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I am trying to inject public services like entityManager in the constructor of a service I created but I keep having this error :
Too few arguments to function AppServicesBillingInterface::__construct(), 0 passed in /var/www/.../src/Controller/TestController.php on line 144 and exactly 1 expected.
In my controllers, services are correctly injected in different methods but in the service I created it's not injected in the constructor.
I didn't change anything in the services.yaml as the documentation says autowire is automatic in Symfony 4.2
PS : I recently updated from Symfony 4.1 to 4.2 and I'm not sure but I think it worked before.
Maybe a library didn't updated correctly but I don't find any errors.
Here are the informations for the service
Service code :
#/src/Services/BillingInterface
namespace AppServices;
use DoctrineORMEntityManagerInterface;
class BillingInterface {
private $em;
public function __construct(EntityManagerInterface $entityManager)
{
$this->em = $entityManager;
}
}
Controller code :
namespace AppController;
use AppServicesBillingInterface;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
class TestController extends AbstractController {
public function teest(EntityManagerInterface $entityManager)
{
$billing = new BillingInterface();
}
}
And If I instantiate BillingInterface with $entityManager
parameter of Controller, it works but I would like it injected directly in the BillingInterface
class constructor.
And finally, here is what is written in Symfony's documentation :
// src/Service/MessageGenerator.php
// ...
use PsrLogLoggerInterface;
class MessageGenerator
{
private $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function getHappyMessage()
{
$this->logger->info('About to find a happy message!');
// ...
}
}
Link : https://symfony.com/doc/current/service_container.html
Chapter : Injecting Services/Config into a Service
So, I don't know what's wrong with my Service.
Thank you for your answers.
php symfony symfony4
add a comment |
I am trying to inject public services like entityManager in the constructor of a service I created but I keep having this error :
Too few arguments to function AppServicesBillingInterface::__construct(), 0 passed in /var/www/.../src/Controller/TestController.php on line 144 and exactly 1 expected.
In my controllers, services are correctly injected in different methods but in the service I created it's not injected in the constructor.
I didn't change anything in the services.yaml as the documentation says autowire is automatic in Symfony 4.2
PS : I recently updated from Symfony 4.1 to 4.2 and I'm not sure but I think it worked before.
Maybe a library didn't updated correctly but I don't find any errors.
Here are the informations for the service
Service code :
#/src/Services/BillingInterface
namespace AppServices;
use DoctrineORMEntityManagerInterface;
class BillingInterface {
private $em;
public function __construct(EntityManagerInterface $entityManager)
{
$this->em = $entityManager;
}
}
Controller code :
namespace AppController;
use AppServicesBillingInterface;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
class TestController extends AbstractController {
public function teest(EntityManagerInterface $entityManager)
{
$billing = new BillingInterface();
}
}
And If I instantiate BillingInterface with $entityManager
parameter of Controller, it works but I would like it injected directly in the BillingInterface
class constructor.
And finally, here is what is written in Symfony's documentation :
// src/Service/MessageGenerator.php
// ...
use PsrLogLoggerInterface;
class MessageGenerator
{
private $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function getHappyMessage()
{
$this->logger->info('About to find a happy message!');
// ...
}
}
Link : https://symfony.com/doc/current/service_container.html
Chapter : Injecting Services/Config into a Service
So, I don't know what's wrong with my Service.
Thank you for your answers.
php symfony symfony4
Hint: the php new operator knows nothing about the Symfony container.
– Cerad
Jan 3 at 16:25
Okay but what about Symfony's documentation where it seems they achieve that ? Link at the end of my message.
– Rxblz18
Jan 3 at 16:51
Can you point out where in the docs the new operator is used? In any event, @Flying's answer below will point you in the right direction. Of course you should really should not have a class with a suffix of 'Interface'. But that is a different topic.
– Cerad
Jan 3 at 16:58
Ok I understand, thank you for your answer.
– Rxblz18
Jan 3 at 17:03
add a comment |
I am trying to inject public services like entityManager in the constructor of a service I created but I keep having this error :
Too few arguments to function AppServicesBillingInterface::__construct(), 0 passed in /var/www/.../src/Controller/TestController.php on line 144 and exactly 1 expected.
In my controllers, services are correctly injected in different methods but in the service I created it's not injected in the constructor.
I didn't change anything in the services.yaml as the documentation says autowire is automatic in Symfony 4.2
PS : I recently updated from Symfony 4.1 to 4.2 and I'm not sure but I think it worked before.
Maybe a library didn't updated correctly but I don't find any errors.
Here are the informations for the service
Service code :
#/src/Services/BillingInterface
namespace AppServices;
use DoctrineORMEntityManagerInterface;
class BillingInterface {
private $em;
public function __construct(EntityManagerInterface $entityManager)
{
$this->em = $entityManager;
}
}
Controller code :
namespace AppController;
use AppServicesBillingInterface;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
class TestController extends AbstractController {
public function teest(EntityManagerInterface $entityManager)
{
$billing = new BillingInterface();
}
}
And If I instantiate BillingInterface with $entityManager
parameter of Controller, it works but I would like it injected directly in the BillingInterface
class constructor.
And finally, here is what is written in Symfony's documentation :
// src/Service/MessageGenerator.php
// ...
use PsrLogLoggerInterface;
class MessageGenerator
{
private $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function getHappyMessage()
{
$this->logger->info('About to find a happy message!');
// ...
}
}
Link : https://symfony.com/doc/current/service_container.html
Chapter : Injecting Services/Config into a Service
So, I don't know what's wrong with my Service.
Thank you for your answers.
php symfony symfony4
I am trying to inject public services like entityManager in the constructor of a service I created but I keep having this error :
Too few arguments to function AppServicesBillingInterface::__construct(), 0 passed in /var/www/.../src/Controller/TestController.php on line 144 and exactly 1 expected.
In my controllers, services are correctly injected in different methods but in the service I created it's not injected in the constructor.
I didn't change anything in the services.yaml as the documentation says autowire is automatic in Symfony 4.2
PS : I recently updated from Symfony 4.1 to 4.2 and I'm not sure but I think it worked before.
Maybe a library didn't updated correctly but I don't find any errors.
Here are the informations for the service
Service code :
#/src/Services/BillingInterface
namespace AppServices;
use DoctrineORMEntityManagerInterface;
class BillingInterface {
private $em;
public function __construct(EntityManagerInterface $entityManager)
{
$this->em = $entityManager;
}
}
Controller code :
namespace AppController;
use AppServicesBillingInterface;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
class TestController extends AbstractController {
public function teest(EntityManagerInterface $entityManager)
{
$billing = new BillingInterface();
}
}
And If I instantiate BillingInterface with $entityManager
parameter of Controller, it works but I would like it injected directly in the BillingInterface
class constructor.
And finally, here is what is written in Symfony's documentation :
// src/Service/MessageGenerator.php
// ...
use PsrLogLoggerInterface;
class MessageGenerator
{
private $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function getHappyMessage()
{
$this->logger->info('About to find a happy message!');
// ...
}
}
Link : https://symfony.com/doc/current/service_container.html
Chapter : Injecting Services/Config into a Service
So, I don't know what's wrong with my Service.
Thank you for your answers.
php symfony symfony4
php symfony symfony4
edited Jan 3 at 16:35
Rxblz18
asked Jan 3 at 16:19


Rxblz18Rxblz18
43
43
Hint: the php new operator knows nothing about the Symfony container.
– Cerad
Jan 3 at 16:25
Okay but what about Symfony's documentation where it seems they achieve that ? Link at the end of my message.
– Rxblz18
Jan 3 at 16:51
Can you point out where in the docs the new operator is used? In any event, @Flying's answer below will point you in the right direction. Of course you should really should not have a class with a suffix of 'Interface'. But that is a different topic.
– Cerad
Jan 3 at 16:58
Ok I understand, thank you for your answer.
– Rxblz18
Jan 3 at 17:03
add a comment |
Hint: the php new operator knows nothing about the Symfony container.
– Cerad
Jan 3 at 16:25
Okay but what about Symfony's documentation where it seems they achieve that ? Link at the end of my message.
– Rxblz18
Jan 3 at 16:51
Can you point out where in the docs the new operator is used? In any event, @Flying's answer below will point you in the right direction. Of course you should really should not have a class with a suffix of 'Interface'. But that is a different topic.
– Cerad
Jan 3 at 16:58
Ok I understand, thank you for your answer.
– Rxblz18
Jan 3 at 17:03
Hint: the php new operator knows nothing about the Symfony container.
– Cerad
Jan 3 at 16:25
Hint: the php new operator knows nothing about the Symfony container.
– Cerad
Jan 3 at 16:25
Okay but what about Symfony's documentation where it seems they achieve that ? Link at the end of my message.
– Rxblz18
Jan 3 at 16:51
Okay but what about Symfony's documentation where it seems they achieve that ? Link at the end of my message.
– Rxblz18
Jan 3 at 16:51
Can you point out where in the docs the new operator is used? In any event, @Flying's answer below will point you in the right direction. Of course you should really should not have a class with a suffix of 'Interface'. But that is a different topic.
– Cerad
Jan 3 at 16:58
Can you point out where in the docs the new operator is used? In any event, @Flying's answer below will point you in the right direction. Of course you should really should not have a class with a suffix of 'Interface'. But that is a different topic.
– Cerad
Jan 3 at 16:58
Ok I understand, thank you for your answer.
– Rxblz18
Jan 3 at 17:03
Ok I understand, thank you for your answer.
– Rxblz18
Jan 3 at 17:03
add a comment |
1 Answer
1
active
oldest
votes
Since your BillingInterface
is a service - you need to use its instance that is provided by Symfony container instead of attempting to instantiate it by yourself. Your controller needs to inject this service in order to be able to use it:
namespace AppController;
use AppServicesBillingInterface;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
class TestController extends AbstractController
{
/**
* @var BillingInterface
*/
private $billing;
/**
* @param BillingInterface $billing
*/
public function __construct(BillingInterface $billing)
{
$this->billing = $billing;
}
public function teest(EntityManagerInterface $entityManager)
{
// Use $this->billing ...
}
}
Thank you for your answer, it solved my problem !
– Rxblz18
Jan 3 at 17:05
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54026081%2finjecting-services-into-a-service%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Since your BillingInterface
is a service - you need to use its instance that is provided by Symfony container instead of attempting to instantiate it by yourself. Your controller needs to inject this service in order to be able to use it:
namespace AppController;
use AppServicesBillingInterface;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
class TestController extends AbstractController
{
/**
* @var BillingInterface
*/
private $billing;
/**
* @param BillingInterface $billing
*/
public function __construct(BillingInterface $billing)
{
$this->billing = $billing;
}
public function teest(EntityManagerInterface $entityManager)
{
// Use $this->billing ...
}
}
Thank you for your answer, it solved my problem !
– Rxblz18
Jan 3 at 17:05
add a comment |
Since your BillingInterface
is a service - you need to use its instance that is provided by Symfony container instead of attempting to instantiate it by yourself. Your controller needs to inject this service in order to be able to use it:
namespace AppController;
use AppServicesBillingInterface;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
class TestController extends AbstractController
{
/**
* @var BillingInterface
*/
private $billing;
/**
* @param BillingInterface $billing
*/
public function __construct(BillingInterface $billing)
{
$this->billing = $billing;
}
public function teest(EntityManagerInterface $entityManager)
{
// Use $this->billing ...
}
}
Thank you for your answer, it solved my problem !
– Rxblz18
Jan 3 at 17:05
add a comment |
Since your BillingInterface
is a service - you need to use its instance that is provided by Symfony container instead of attempting to instantiate it by yourself. Your controller needs to inject this service in order to be able to use it:
namespace AppController;
use AppServicesBillingInterface;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
class TestController extends AbstractController
{
/**
* @var BillingInterface
*/
private $billing;
/**
* @param BillingInterface $billing
*/
public function __construct(BillingInterface $billing)
{
$this->billing = $billing;
}
public function teest(EntityManagerInterface $entityManager)
{
// Use $this->billing ...
}
}
Since your BillingInterface
is a service - you need to use its instance that is provided by Symfony container instead of attempting to instantiate it by yourself. Your controller needs to inject this service in order to be able to use it:
namespace AppController;
use AppServicesBillingInterface;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
class TestController extends AbstractController
{
/**
* @var BillingInterface
*/
private $billing;
/**
* @param BillingInterface $billing
*/
public function __construct(BillingInterface $billing)
{
$this->billing = $billing;
}
public function teest(EntityManagerInterface $entityManager)
{
// Use $this->billing ...
}
}
answered Jan 3 at 16:55
FlyingFlying
3,4592919
3,4592919
Thank you for your answer, it solved my problem !
– Rxblz18
Jan 3 at 17:05
add a comment |
Thank you for your answer, it solved my problem !
– Rxblz18
Jan 3 at 17:05
Thank you for your answer, it solved my problem !
– Rxblz18
Jan 3 at 17:05
Thank you for your answer, it solved my problem !
– Rxblz18
Jan 3 at 17:05
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54026081%2finjecting-services-into-a-service%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Hint: the php new operator knows nothing about the Symfony container.
– Cerad
Jan 3 at 16:25
Okay but what about Symfony's documentation where it seems they achieve that ? Link at the end of my message.
– Rxblz18
Jan 3 at 16:51
Can you point out where in the docs the new operator is used? In any event, @Flying's answer below will point you in the right direction. Of course you should really should not have a class with a suffix of 'Interface'. But that is a different topic.
– Cerad
Jan 3 at 16:58
Ok I understand, thank you for your answer.
– Rxblz18
Jan 3 at 17:03