Сервисы и использование автонастройки Symfony 3.3

Я обновил свой проект до Symfony 3.3. Я хочу использовать новую функцию автоматической настройки для служб. Я пытался избавиться от $this->get(), но у меня есть ошибки в контроллерах и командах.

В приведенном ниже примере кода в контроллере у меня есть эта ошибка:

recapitulatifCollesAction() requires that you provide a value for the "$checkGele" argument. Either the argument is nullable and no null value has been provided, no default value has been provided or because there is a non optional argument after this one.

В командах я вообще не знаю, как избавиться от $container->get().

У вас есть идея, как я могу заставить это работать?

Контроллер:

public function recapitulatifCollesAction($estEnCours, CheckGeleService $checkGele)
{
    // ...
    $checkGele->getGeleAutorisation($colle);
    // ...
}

Моя конфигурация:

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false

Изменить: новая ошибка после изменения config.yml

Новое сообщение об ошибке


person Kristen Joseph-Delaffon    schedule 15.07.2017    source источник


Ответы (1)


Для контроллеров вам также необходимо добавить преобразователь аргументов службы в службу автоподключения в методах «действий». Это все об автоподключении по умолчанию в 3.3:

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false

    AppBundle\:
        resource: '../../src/AppBundle/*'
        exclude: '../../src/AppBundle/{Controller, Entity, Repository}'

    AppBundle\Controller\:
        resource: '../../src/AppBundle/Controller'
        public: true
        tags: [ controller.service_arguments ]
person yceruto    schedule 15.07.2017
comment
У меня есть ошибка 500, когда у меня было это в моей конфигурации. Это действительно сложно отлаживать, так как я ничего не вижу в журналах... - person Kristen Joseph-Delaffon; 16.07.2017
comment
У меня появилось новое сообщение об ошибке: The autoloader expected class "AppBundle\Resources\public\ckeditor\samples\old\assets\posteddata" to be defined in file "root\vendor\composer/../../src\AppBundle\Resources\public\ckeditor\samples\old\assets\posteddata.php". The file was found but the class was not in it, the class name or namespace probably has a typo in root\app/config\config.yml. Я проверил, и этот файл даже не является классом, который должен быть загружен. Это обычный файл php. Поэтому я исключил импорт папки «Ресурсы» в службы, но у меня все еще есть та же ошибка. - person Kristen Joseph-Delaffon; 16.07.2017
comment
И происходит странная вещь: этот файл posteddata.php загружается, когда я перехожу на домашнюю страницу, поэтому его содержимое отображается вверху страницы с ошибкой Symfony (проверьте обновленный первый пост) - person Kristen Joseph-Delaffon; 16.07.2017
comment
Кажется, что ваша папка Resources/public содержит некоторые сторонние PHP-файлы lib (здесь posteddata.ph‌​p). Вам нужно исключить их из автонастройки сервиса, установив этот exclude: '../../src/AppBundle/{Controller, Entity, Repository, Resources}' в записи AppBundle\:. - person Michaël Perrin; 07.08.2017