Je suis en train de migrer vers symfony 3.3 et d'utiliser de nouveaux services fonction autowire
/autoconfigure
:Symfony 3.3 Services autoconfiguration
Donc services.yml j'ai:
services:
_defaults:
autowire: true
autoconfigure: true
public: false
# makes classes in src/AppBundle available to be used as services
AppBundle\:
resource: '../../src/AppBundle/*'
# you can exclude directories or files
# but if a service is unused, it's removed anyway
exclude: '../../src/AppBundle/{Entity,Controller,DQL,Form/DataTransformer,Repository}'
Je déclare mon extension de brindille comme:
AppBundle\Twig\ImageExtension:
arguments:
$env: "%kernel.environment%"
et constructeur pour ce service:
public function __construct(TokenStorage $token, UserRepository $userRepository, RedisCacheService $cache, string $env)
{
$this->env = $env;
$this->user = $token->getToken() ? $token->getToken()->getUser() : false;
$this->userRepository = $userRepository;
$this->cache = $cache;
}
semble que tout est ok, mais je suis obtenir cette erreur:
(1/1) AutowiringFailedException
Cannot autowire service "AppBundle\Twig\ImageExtension": argument "$env" of method "__construct()" must have a type-hint or be given a value explicitly.
et ont aucune idée de comment y remédier.
Hélas! , autowire ne fonctionne qu'avec les classes. Aucune chaîne ou entier. Vous pourriez faire une classe qui enveloppe $ env mais toute cette mode autowire ne va pas durer. https://stackoverflow.com/questions/44387103/symfony3-3-autowire-a-controller-with-scalar-argument – Cerad
@kRicha ne parle pas d'autowiring l'argument 'env', il parle de sa configuration qui ne le fait pas travail. Basé sur [la documentation officielle sur le câblage manuel] (http://symfony.com/doc/current/service_container.html#manually-wiring-arguments), sa configuration semble correcte. @kRicha: Êtes-vous sûr de mettre à jour vos dépendances Symfony jusqu'à 3.3+? –
@ NoémiSalaün c'est vrai – kRicha