我正在嘗試圍繞請求引數撰寫自己的包裝器,因此我可以在請求堆疊不可用的整個系統中(例如在命令中)重用相同的引數類。目前,有幾個服務注入了一個請求包裝器,它本身已經RequestStack注入了。
我希望實作的是,在 中services.yml,定義服務App\Util\Parameters應該注入以下示例中的值$queryString和值:$content
class SomeService {
public function __construct(Symfony\Component\HttpFoundation\RequestStack $stack)
{
$request = $stack->getCurrentRequest();
...
$queryString = $request->getQueryString();
$content = $request->getContent();
...
所以,在services.yml,我希望做類似的事情:
# psuedo-config..!
App\Util\Parameters:
arguments:
$content: ['requestStack.currentRequest.getContent']
$queryString: ['requestStack.currentRequest.getQueryString']
給定以下課程:
namespace App\Util;
class Parameters {
public function __construct(protected mixed $content = [], protected string $queryString = "")
{
...
我希望在系統的其他部分RequestStack不可用的地方,我可以執行以下操作來覆寫注入,
$params = new Parameters(['foo' => 'bar']);
但是在注入Parameters服務的情況下,這些值將從請求中填充。
uj5u.com熱心網友回復:
您需要創建一個服務工廠。
App\Util\Parameters:
factory: '@App\Util\ParameterFactory'
然后是工廠:
class ParameterFactory {
public function __construct(private RequestStack $stack)
{}
public function __invoke(): Parameters {
$request = $this->stack->getCurrentRequest();
$queryString = $request->getQueryString();
$content = $request->getContent();
return new Parameters($content, $queryString);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/448590.html
