如何调用注入到另一个构造函数服务中的方法服务 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();
}
}
所以我真的很想弄清楚如何在 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();
}
}