猿问

Symofny 3 - parent::__construct() 不能被注入

我试图将一个服务注入另一个服务以从中调用函数,但它引发了一个错误:


类型错误:传递给 App\Base\Service\Shop\ShopService::__construct() 的参数 1 必须是 App\Base\Service\AccountService 的实例,ContainerSgqv3vy\appDevDebugProjectContainer 的实例


我认为我正确地实现了一切:


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 BaseService

{

    /** @var ContainerInterface  */

    var $container;

    var $em;


public function __construct(ContainerInterface $container, EntityManagerInterface $em)

{

    $this->container = $container;

    $this->em = $em;

}

服务.yml


app.shop:

  class: App\Base\Service\ShopService

  arguments: ["@service_container", "@doctrine.orm.default_entity_manager"]

  public: true


弑天下
浏览 115回答 1
1回答

ITMISS

当您扩展具有构造函数参数的类时,您应该保留这些参数并在其后添加任何额外的参数。例子:class BaseClass{    public function __construct(Foo $foo, Bar $bar) {        // ....    }}要实例化此类,您需要传递容器和实体管理器:$base = new BaseClass($fooInstance, $barInstance);如果你想扩展这个类,它很可能仍然需要那些依赖项 + 我们的新依赖项: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 的确切语法,但概念是一样的。
随时随地看视频慕课网APP
我要回答