所以我真的很想弄清楚如何在 Symfony 5 中做到這一點。
我有一個名為 PaymentRequestService 的服務,它具有對另一個應用程式(基于微服務)的請求的完整邏輯。我在 PaymentService 中注入了 PaymentRequestService 作為建構式,這是一個處理資料、進行驗證等的服務。
現在我正在嘗試使用 PaymentService 從我的控制器呼叫 PaymentRequestService 的方法。類似的東西:$paymentService->$paymentRequestService->method。
有人可以告訴我該怎么做嗎?
現在它看起來像這樣$payment = $paymentRequestService->getPaymentRequest((string)$id)
但我想消除 PaymentRequestService。
uj5u.com熱心網友回復:
這應該可以通過您當前實作的 getter 實作,但為什么不直接將 PaymentRequestService 傳遞給使用它的控制器呢?例如$paymentRequestService->method()
服務在應用程式中的每個類中都是可注入的,并且由于(默認情況下)只有該服務的一個實體在運行,您可以將其自動連接到您的控制器。
uj5u.com熱心網友回復:
我不爭論你想使用的架構......但你會這樣做:(PHP 8 語法)
class PaymentService
public function __construct(private PaymentRequestService $requestService)
{}
public function getRequest(): PaymentRequestService
{
return $this->requestService;
}
}
class MyController extends AbstractController
{
public function myAction(RequestService $requestService, Request $request): Response
{
$id = $request->get('id');
$payment = $requestService->getRequest()->getPaymentRequest((string)$id);
return new Response('done');
}
}
您還可以將特定方法映射為不需要級聯 - 但是為什么您首先不直接使用 RequestService 。
uj5u.com熱心網友回復:
您必須直接在控制器中注入服務并在 PaymentService 中進行資料驗證。例如:
class MyController extends AbstractController
{
private PaymentRequestService $paymentRequestService;
public function __construct(PaymentRequestService $paymentRequestService)
{
$this->paymentRequestService = $paymentRequestService;
}
public function index()
{
$this->paymentRequestService->method();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/476950.html
