Symfony 3 - parent::__construct() 无法注入
Symofny 3 - parent::__construct() cant be injected
我正在尝试将一项服务注入另一项服务以从中调用函数,但它引发了错误:
Type error: Argument 1 passed to App\Base\Service\Shop\ShopService::__construct() must be an instance of App\Base\Service\AccountService, instance of ContainerSgqv3vy\appDevDebugProjectContainer given
而且我认为我正确地实施了所有内容:
use App\Base\Service\AccountService;
use App\Base\Service\BaseService;
class ShopService extends BaseService
{
/**
* @param AccountService $accountService
*/
public function __construct(AccountService $accountService)
{
parent::__construct();
$this->accountService = $accountService;
}
并从中调用我的函数:
this->accountService->getMyFunction();
我的实例化 class :
class BaseService
{
/** @var ContainerInterface */
var $container;
var $em;
public function __construct(ContainerInterface $container, EntityManagerInterface $em)
{
$this->container = $container;
$this->em = $em;
}
service.yml
app.shop:
class: App\Base\Service\ShopService
arguments: ["@service_container", "@doctrine.orm.default_entity_manager"]
public: true
当您扩展具有构造函数参数的 class 时,您应该保留这些参数并在其后添加任何额外的参数。
示例:
class BaseClass
{
public function __construct(Foo $foo, Bar $bar) {
// ....
}
}
要实例化此 class,您需要传递容器和实体管理器:
$base = new BaseClass($fooInstance, $barInstance);
如果你想扩展这个 class,它很可能仍然需要那些依赖项 + 我们的新依赖项:
class ChildClass extends BaseClass
{
public function __construct(Foo $foo, Bar $bar, Duck $duck)
{
// The parent (BaseClass) requires Foo and Bar,
// or it will throw an error
parent::__construct($foo, $bar);
$this->duck = $duck;
}
}
要实例化我们的新 ChildClass,我们需要传递三个参数:
$child = new ChildClass($fooInstance, $barInstance, $duckInstance);
然后,当您在 service.yml 中定义我们的 ChildClass 时,您需要定义所有三个依赖项:
app.childclass:
class: ChildClass
arguments: ["Foo", "Bar", "Duck"]
...
由于我自己没有使用 Symfony,所以您必须原谅不知道 service.yml 的确切语法,但概念是相同的。
我正在尝试将一项服务注入另一项服务以从中调用函数,但它引发了错误:
Type error: Argument 1 passed to App\Base\Service\Shop\ShopService::__construct() must be an instance of App\Base\Service\AccountService, instance of ContainerSgqv3vy\appDevDebugProjectContainer given
而且我认为我正确地实施了所有内容:
use App\Base\Service\AccountService;
use App\Base\Service\BaseService;
class ShopService extends BaseService
{
/**
* @param AccountService $accountService
*/
public function __construct(AccountService $accountService)
{
parent::__construct();
$this->accountService = $accountService;
}
并从中调用我的函数:
this->accountService->getMyFunction();
我的实例化 class :
class BaseService
{
/** @var ContainerInterface */
var $container;
var $em;
public function __construct(ContainerInterface $container, EntityManagerInterface $em)
{
$this->container = $container;
$this->em = $em;
}
service.yml
app.shop:
class: App\Base\Service\ShopService
arguments: ["@service_container", "@doctrine.orm.default_entity_manager"]
public: true
当您扩展具有构造函数参数的 class 时,您应该保留这些参数并在其后添加任何额外的参数。
示例:
class BaseClass
{
public function __construct(Foo $foo, Bar $bar) {
// ....
}
}
要实例化此 class,您需要传递容器和实体管理器:
$base = new BaseClass($fooInstance, $barInstance);
如果你想扩展这个 class,它很可能仍然需要那些依赖项 + 我们的新依赖项:
class ChildClass extends BaseClass
{
public function __construct(Foo $foo, Bar $bar, Duck $duck)
{
// The parent (BaseClass) requires Foo and Bar,
// or it will throw an error
parent::__construct($foo, $bar);
$this->duck = $duck;
}
}
要实例化我们的新 ChildClass,我们需要传递三个参数:
$child = new ChildClass($fooInstance, $barInstance, $duckInstance);
然后,当您在 service.yml 中定义我们的 ChildClass 时,您需要定义所有三个依赖项:
app.childclass:
class: ChildClass
arguments: ["Foo", "Bar", "Duck"]
...
由于我自己没有使用 Symfony,所以您必须原谅不知道 service.yml 的确切语法,但概念是相同的。