如何调用注入到另一个构造函数服务中的方法服务 PHP Symfony

How to call a method service injected in another constructor service PHP Symfony

所以我真的很想弄清楚如何在 Symfony 5 中做到这一点。

我有一个名为 PaymentRequestService 的服务,它具有向另一个应用程序(基于微服务)发出请求的完整逻辑。 我在 PaymentService 中注入了 PaymentRequestService 作为构造函数,这是一种处理数据、进行验证等的服务

现在我正在尝试通过使用 PaymentService 从我的控制器调用来自 PaymentRequestService 的方法。类似这样的东西:$paymentService->$paymentRequestService->method.

谁能告诉我该怎么做?

现在看起来像这样 $payment = $paymentRequestService->getPaymentRequest((string)$id) 但是我想去掉PaymentRequestService。

这应该可以通过 getter 实现,就像您当前实现的那样,但为什么不直接将 PaymentRequestService 传递给使用它的控制器呢? 例如$paymentRequestService->method()

您的应用程序中的每个 class 服务都是可注入的,并且由于(默认情况下)只有一个该服务的实例 运行,您可以将它自动连接到您的控制器。

我不争论你想使用的架构......但你会这样做: (PHP 8 语法)

class PaymentService

    public function __construct(private PaymentRequestService $requestService)
    {}
  
    public function getRequest(): PaymentRequestService
    {
         return $this->requestService;
    }
}


class MyController extends AbstractController 
{
    public function myAction(PaymentService $paymentService, Request $request): Response
    {
        $id = $request->get('id');
        $payment = $paymentService->getRequest()->getPaymentRequest((string)$id);

        return new Response('done');
    } 

}

您也可以将特定方法映射为不需要级联 - 但为什么您一开始不直接使用 RequestService。

您必须直接在控制器中注入服务并在 PaymentService 中进行数据验证。例如:

class MyController extends AbstractController 
{
    private PaymentRequestService $paymentRequestService; 
    public function __construct(PaymentRequestService $paymentRequestService)
    {
       $this->paymentRequestService = $paymentRequestService;
    }
    
    public function index()
    { 
       $this->paymentRequestService->method();
    }     
}