Autowire не работает - PullRequest
       8

Autowire не работает

0 голосов
/ 07 мая 2018

[ПРОБЛЕМА]

Я нахожусь на Symfony 3.4, и у меня возникли некоторые проблемы с обработкой сервисов. Хотя это работает, я вынужден использовать старый способ, который является проблемой.

Я использую DataTransformer в форме, но по некоторым причинам я получил следующую ошибку

Ошибка типа: аргумент 1 передан в AppBundle \ Form \ VarianteEscalierOptGc \ VarianteEscalierOptGcEditPoteauType :: __ construct () должен быть экземпляром AppBundle \ Form \ DataTransformer \ VarianteEscalierTransformer, ни один не передан

Как написано в документе:

Вот и все! Пока вы используете autowire и autoconfigure, Symfony будет автоматически знать, как передать вашему TaskType экземпляр IssueToNumberTransformer.

Это мой случай, но все равно получена ошибка.

Кроме того, если кто-то может намекнуть мне, как правильно обновить мои сервисы ниже, это было бы здорово.

[FILES]

FormType

public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add('varianteEscalier', HiddenType::class, array('data'=>$options['data']->getVarianteEscalier()->getId()))
            ->add('gardecorpsOption', EntityType::class, array(
                'class'=>'AppBundle:GardecorpsOption',
                'query_builder'=>function(EntityRepository $er) {
                    return $er->createQueryBuilder("gco")
                              ->where("gco.type='poteau'")
                              ->andWhere("gco.actif=1");
                },
            ))
            ->add('quantite');
    $builder->get('varianteEscalier')->addModelTransformer($this->transformer);
}

Transformer.php

class VarianteEscalierTransformer implements DataTransformerInterface {
    private $em;

    /**
     * @param EntityManagerInterface $em
     */
    public function __construct(EntityManagerInterface $em) {
        $this->em=$em;
    }

    /**
     * @param  Object|null $entity
     * @return string
     */
    public function transform($entity) {
        if(null === $entity) {
            return "";
        }

        return $entity->getId();
    }

    /**
     * @param $entityId
     * @return VarianteEscalier|null
     */
    public function reverseTransform($entityId) {
        if(!$entityId) {
            return null;
        }
        $entity=$this->em->getRepository(VarianteEscalier::class)->findOneBy(array('id'=>$entityId));
        if($entity === null) {
            throw new TransformationFailedException(sprintf('VarianteEScalier avec l\'id '.$entityId.' n\'existe pas!'));
        }

        /** @noinspection PhpIncompatibleReturnTypeInspection */
        return $entity;
    }
}

services.yml

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false
    listener.projet:
        class: AppBundle\Listener\ProjetListener
        arguments: ['@security.token_storage']
        tags:
            - { name: doctrine.orm.entity_listener, lazy: true }
    listener.variante:
        class: AppBundle\Listener\VarianteListener
        tags:
            - { name: doctrine.orm.entity_listener, lazy: true }
    service.upload:
        public: true
        class: AppBundle\Service\UploadService
        arguments:
            $dirPicto: '%dir_picto%'

1 Ответ

0 голосов
/ 07 мая 2018

Вы пропустили раздел обнаружения служб, поэтому сразу после _default вы забыли это

_defaults:
  ...

  App\: #You might need to change this to the correct namespace
    resource: '../src/*'

Взгляните https://symfony.com/doc/current/service_container/3.3-di-changes.html#step-4-auto-registering-services

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...