Intereting Posts
Laravel 4 загружаемая загрузка и категории, подкатегории, статьи MySQL GROUP BY и заполняют пустые строки Приложение Symfony – как добавить расчетные поля в объекты Propel? Получающий почтовый сервер вставляет пространство перед каждой новой строкой, разбивая множественные / альтернативные Уникальная аутентификация Symfony sfGuardUser на нескольких поддоменах Возвращаемое значение php mb_strlen является странным jQuery Tokeninput добавить, если не существует Использовать кеширование браузера и CakePHP Как устранить неполадку пакета при попытке заставить композитора получить последние версии пакетов? PHP – Создание всех возможных комбинаций заданных символов API REST Laravel с параметрами запроса Есть ли ограничение по размеру для открытия файлов в PHP? Какой шифр PHP mcrypt является самым безопасным? MySQL один оператор для объединения двух таблиц Как загрузить (поток) большие файлы в symfony2

Автоконфигурация служб Symfony 3.3

Я пытаюсь перейти на symfony 3.3 и использовать новые функции autowire / autoconfigure services:

Так в services.yml у меня есть:

 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}' 

Я объявляю расширение своей ветки как:

 AppBundle\Twig\ImageExtension: arguments: $env: "%kernel.environment%" 

и конструктор для этой службы:

 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; } 

кажется, что все в порядке, но я получаю эту ошибку:

 (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. 

и не знаю, как это исправить.

    Поэтому проблема заключалась в том, что я пытался использовать services.yml из AppBundle, если я правильно понимаю, старый стиль импорта сервисов из пакетов не работает с autowiring / autoconfiguring, потому что нам нужно переписать метод load() из AppExtension для использования типа. Поэтому я заменил все свои сервисы на app/config/services.yml и это помогает мне.

    У меня было такое же сообщение об ошибке, но вызвано другой ошибкой. Может быть, кто-то найдет это полезным.

    Моя первоначальная конфигурация в service.yml была:

     app.my_service: class: 'AppBundle\Service\MyService' arguments: $foobar: 'some value for foobar' public: true 

    И я получал эту ошибку:

    Невозможно выполнить аудит службы «AppBundle \ Service \ MyService»: аргумент «$ foobar» метода «__construct ()» должен иметь подсказку типа или явно указывать значение.

    Затем несколько часов спустя я нашел решение:

     AppBundle\Service\MyService: arguments: $foobar: 'some value for foobar' app.my_service: alias: AppBundle\Service\MyService public: true