Maison  >  Questions et réponses  >  le corps du texte

Erreur du service d'enregistrement automatique : dépend des entités ORM

Je développe une application Symfony 3. Le journal du profileur Symfony me dit :

依赖于服务自动注册类型"AppEntitySubDirCategory"已自3.4版本起被弃用,并且在4.0版本中将不再支持。
请创建一个名为"AppEntitySubDirCategory"的服务。

Cependant, il ne s'agit que d'un simple bean ORM :

/**
 * @ORMEntity
 * @ORMTable(name="category")
 */
class Category
{
...

Comment dois-je résoudre ce problème ? Dois-je vraiment déclarer l'entité ORM en tant que service dans services.yaml ? Si oui, que faut-il faire ?

MISE À JOUR En fait, mes entités sont dans un sous-répertoire. J'ai modifié ma question.

Dans mon service.yaml j'ai essayé :

App:
    resource: '../src/*'
    exclude: '../src/{Entity,Repository,Tests,Entity/SubDir}'

...Mais cela n'a aucun effet.

P粉872182023P粉872182023323 Il y a quelques jours750

répondre à tous(1)je répondrai

  • P粉281089485

    P粉2810894852023-11-06 19:06:16

    Avez-vous une classe sous Service-auto Registration qui utilise des entités comme paramètres de constructeur ?

    C'est là que réside votre problème.

    Vous devez vous demander si cette classe associée est vraiment un service ou simplement un simple objet dont vous créez toujours des instances vous-même.

    S'il n'est pas utilisé comme service via un conteneur, vous avez deux options :

    Vous pouvez exclure cette classe via un modèle global comme le suivant :

    AppBundle\:
        resource: '...'
        # 您可以排除目录或文件
        # 但如果一个服务未使用,它会被移除
        exclude: '../../{Entity,PathToYourNotService}'

    Ou vous pouvez définir les paramètres suivants dans votre configuration :

    parameters:
        container.autowiring.strict_mode: true

    Avec cette option, le conteneur n'essaiera pas de créer une classe de service avec des paramètres qui ne sont pas disponibles en tant que service, et vous obtiendrez une erreur décisive. Il s'agit du paramètre par défaut pour SF4.

    Un bon exemple qui déclenche cette erreur est une classe d'événements personnalisée qui prend une entité comme charge utile dans le constructeur :

    namespace AppBundle\Event;
    
    use AppBundle\Entity\Item;
    use Symfony\Component\EventDispatcher\Event;
    
    class ItemUpdateEvent extends Event
    {
        const NAME = 'item.update';
    
        protected $item;
    
        public function __construct(Item $item)
        {
            $this->item = $item;
        }
    
        public function getItem()
        {
            return $this->item;
        }
    }

    Maintenant, si ce fichier n'est pas spécifiquement exclu, le conteneur tentera de l'enregistrer automatiquement en tant que service. Le corps solide étant exclu, il ne peut pas être câblé automatiquement. Mais dans la version 3.4, il existe ce mécanisme de repli qui déclenche cet avertissement. Une fois strict_mode activé, l'événement n'est pas disponible en tant que service et générera une erreur si vous essayez de l'utiliser en tant que service.

    répondre
    0
  • Annulerrépondre