我有一個服務,從我的parameters.yml注入字符串值。注入參數到服務Symfony 3.3
我聲明如下服務,以便:
parameters:
url: '%cms_url%'
client_id: '%cms_client_id%'
client_secret: '%cms_client_secret%'
services:
_defaults:
autowire: true
autoconfigure: true
public: false
AppBundle\:
resource: '../../src/AppBundle/*'
exclude: '../../src/AppBundle/{Entity,Repository}'
api:
class: AppBundle\Service\Api
arguments: ['@session', '%cms_url%']
autowire: false
access_token_generator:
class: AppBundle\Security\AccessTokenGenerator
arguments: [cms_url, cms_client_id, cms_client_secret]
autowire: false
當我跑了AccessTokenGenerator拋出一個錯誤的應用說:
不能自動裝配服務參數$ apiUrl必須typehint或直接給予 值。
這是我AccessTokenGenrator類:
class AccessTokenGenerator
{
private $apiUrl;
private $clientId;
private $clientSecret;
public function __construct(string $apiUrl, string $clientId, string $clientSecret)
{
$this->apiUrl = $apiUrl;
$this->clientId = $clientId;
$this->clientSecret = $clientSecret;
}
public function generateAccessToken(string $username, string $password) : ?AccessToken
{
$queryParams = [
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret,
'grant_type' => 'password',
'username' => $username,
'password' => $password
];
$requestUrl = $this->apiUrl . '/oauth/v2/token?' . http_build_query($queryParams);
$client = new Client();
$request = new Request('GET', $requestUrl);
$response = $client->send($request);
$contents = json_decode($response->getBody()->getContents(), true);
if (isset($contents['access_token'])) {
$accessToken = new AccessToken();
$accessToken->setAccessToken($contents['access_token']);
$accessToken->setExpiresIn($contents['expires_in']);
$accessToken->setTokenType($contents['token_type']);
$accessToken->setScope($contents['scope']);
$accessToken->setRefreshToken($contents['refresh_token']);
return $accessToken;
}
}
}
我不知道爲什麼它前進到自動裝配,甚至我的配置設置爲false。
謝謝!
不知道爲什麼自動裝配仍處於活動狀態可能是緩存問題?但你根本不需要關掉它。您可以手動傳遞參數作爲命名參數。看看https://symfony.com/doc/current/service_container.html#manually-wiring-arguments – Joe
因爲你已經標記了這個問題已解決,我們很想知道你是如何解決你的問題的 – Arno