私のparameters.ymlからの文字列値を注入するサービスがあります。サービスへのパラメータの入力Symfony 3.3
私はそうのようなサービスを宣言:
は、サービスの引数$ apiUrlをautowireすることはできません直接typehintまたは与えられた 値を持っている必要があります。私はそれがAccessTokenGeneratorはというエラーをスローアプリが実行したとき
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
。私はそれも私の設定がfalseに設定されているオートワイヤリングに進み、なぜ知らない
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; } } }
:
は、これは私のAccessTokenGenratorクラスです。
ありがとうございます!
autowiringがまだキャッシュの問題の可能性がある理由を知りませんか?しかし、あなたはそれをまったくオフにする必要はありません。名前付き引数として手動でパラメータを渡すことができます。 https://symfony.com/doc/current/service_container.html#manually-wiring-arguments – Joe
この問題を解決済みとマークしたので、問題をどのように解決したかがわかりました – Arno