【问题标题】:Symfony 4 AbstractController Issue with Parameter CountSymfony 4 AbstractController 参数计数问题
【发布时间】:2018-09-13 18:57:17
【问题描述】:

我正在尝试在 Symfony 4 中编写 API。在尝试将 DependencyInjection 用于我创建的服务 API 类时,我的控制器方法遇到了问题。我尝试了几种不同的方法来编写代码,但无法弄清楚。

https://symfony.com/doc/current/components/dependency_injection.html

我可以创建一个 getNext()(而不是下面的 get())方法,代码将按预期运行,但如果我尝试使用 get() 方法,我会收到错误消息。这些是涉及的基本类。大部分代码已被删除。

class AppointmentController extends AbstractController
{

    /**
     * @Route("/appointment/getNext", name="appointment/getNext")
     * 
     */
    public function get(string $id = null, CernerFhir $fhirApi)
    {
        $request = Request::createFromGlobals();
        ...more code...
    }
}        

class CernerFhir
{

    public function __construct(LoggerInterface $logger, ParameterBagInterface $params)
    {
        $this->logger = $logger;
        $this->params = $params;
        }
    }
}

警告:App\Controller\AppointmentController::get(?string $id, App\Service\CernerFhir $fhirApi) 的声明应该与 Symfony\Bundle\FrameworkBundle\Controller\AbstractController::get(string $id) 兼容

【问题讨论】:

  • 该错误是因为 AbstractController 已经有一个名为 get 的方法。虽然与您的问题没有直接关系,但无需在控制器操作内创建请求对象。只需注入它。
  • 如上所述 - 您选择了一个已经存在的方法名称。

标签: symfony symfony4


【解决方案1】:

AbstractController 使用一个接口,该接口定义了具有特定数量的参数和返回类型的 get() 方法。如果您不想覆盖它的 get 方法(我不推荐),则必须编写它以使其与接口中的定义兼容。

http://php.net/manual/en/language.oop5.interfaces.php

【讨论】:

  • 我理解这个错误,但我不知道如何纠正它。似乎依赖注入对象不应该计入参数的数量,但它们确实如此。要解决这个问题,我应该放弃依赖注入,然后尝试手动构建对象吗?我不确定如何获取或构建全局记录器和参数包对象。
  • 1) 将您的方法重命名为其他名称,例如 getNext() 2) 依赖注入仅适用于类构造函数,添加一个 __construct 方法,将您的 api 存储在控制器中的变量中,您将没事。
  • 我尝试使用单独的类执行方法“2”; public function __construct(CernerFhir $api) { ... },但是我得到了两个参数的错误。我认为它在抱怨记录器和参数包。 “函数 App\Service\CernerFhirAppointment::__construct() 的参数太少”
  • 谢谢钠。我终于能够弄清楚了。依赖注入确实在控制器的构造函数中起作用,但在我的服务类构造函数中不起作用。我不知道为什么。
  • 依赖自动装配应该适用于存储在 src 文件夹中的任何类,我知道的唯一例外是实体和实体侦听器。如果您需要这方面的帮助,您应该将其发布在新主题中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 2016-01-28
相关资源
最近更新 更多