从另一个类继承的构造方法看不到我的附加参数

问题描述 投票:0回答:1

我正在 Sylius 框架中用 PHP 编写一个 Web 应用程序。我创建了一个继承自框架内置

ResourceController
类的新类:

class ResourceController extends \Sylius\Bundle\ResourceBundle\Controller\ResourceController

类 \Sylius\Bundle\...\ResourceController 有一个构造函数方法,其中有 17 个参数。在继承该类的类中,我需要向构造函数添加三个参数。所以我的代码如下所示:

public Sender $sender;
public ChannelContextInterface $channelContext;
public LocaleContextInterface $localeContext;
public function __construct(MetadataInterface $metadata, RequestConfigurationFactoryInterface $requestConfigurationFactory, ?ViewHandlerInterface $viewHandler, RepositoryInterface $repository, FactoryInterface $factory, NewResourceFactoryInterface $newResourceFactory, ObjectManager $manager, SingleResourceProviderInterface $singleResourceProvider, ResourcesCollectionProviderInterface $resourcesFinder, ResourceFormFactoryInterface $resourceFormFactory, RedirectHandlerInterface $redirectHandler, FlashHelperInterface $flashHelper, AuthorizationCheckerInterface $authorizationChecker, EventDispatcherInterface $eventDispatcher, ?StateMachineInterface $stateMachine, ResourceUpdateHandlerInterface $resourceUpdateHandler, ResourceDeleteHandlerInterface $resourceDeleteHandler, Sender $sender, ChannelContextInterface $channelContext, LocaleContextInterface $localeContext)
{
    parent::__construct($metadata, $requestConfigurationFactory, $viewHandler, $repository, $factory, $newResourceFactory, $manager, $singleResourceProvider, $resourcesFinder, $resourceFormFactory, $redirectHandler, $flashHelper, $authorizationChecker, $eventDispatcher, $stateMachine, $resourceUpdateHandler, $resourceDeleteHandler);
    $this->sender = $sender;
    $this->channelContext = $channelContext;
    $this->localeContext = $localeContext;
}

启动应用程序后,我收到了(Symfony)错误,即使理论上我没有跳过任何内容(尽管我可能是错的)

函数 App\Controller\Resource\ResourceController::__construct() 的参数太少,第 31 行的 [...] 中传入了 17 个参数,而预期的参数正好是 20 个

_sylius.yaml 文件片段:

sylius_customer:
resources:
    customer:
        classes:
            model: App\Entity\Customer\Customer
            repository: App\Repository\CustomerRepository
            controller: App\Controller\Resource\ResourceController

还有 config/routes.yaml 文件:

sylius_admin_customer_create:
  path: /admin/customers/new
  methods: [GET,POST]
  defaults:
      _controller: sylius.controller.customer::createAction

我做错了什么?

php symfony oop inheritance sylius
1个回答
1
投票

无需重新定义控制器

__construct
方法,您可以将所需的服务直接注入控制器操作方法。例如:

public function someAction(
    Sender $sender,
    ChannelContextInterface $channelContext, 
    LocaleContextInterface $localeContext
) {
    // method logic that uses services
}

在这种情况下,您:

  1. 不需要重写控制器构造方法并列出所有17个参数
  2. 不需要在中定义控制器类参数
    services.yaml
    文件
  3. 仅注入特定领域所需的服务 更优化的控制器方法

有关在 Symfony 控制器方法中注入服务的更多信息可以在 Symfony 文档中找到。

© www.soinside.com 2019 - 2024. All rights reserved.