Bonjour,

je viens de faire la mise à jour des packages (je sais, pas une tres bonne idée) mais en general ca se passe plutôt bien et si ca se passe mal j'arrive à trouver l'infos quelque part mais la rien.

Quand je fais :

docker-compose exec php bin/console doctrine:fixtures:load

J'ai cette erreur :

> purging database
[critical] Error thrown while running command "doctrine:fixtures:load". Message: "Can't instantiate custom generator : UlidGeneratorService"

In ClassMetadataFactory.php line 695:

  Can't instantiate custom generator : UlidGeneratorService

doctrine:fixtures:load [--append] [--group GROUP] [--em EM] [--purger PURGER] [--purge-exclusions PURGE-EXCLUSIONS] [--shard SHARD] [--purge-with-truncate]

2021-07-20T12:39:15+00:00 [info] User Deprecated: Since doctrine/doctrine-bundle 2.4: The "connection_override_options" connection parameter is deprecated

Si quelqu'un à l'info, je veux bien le lien ou la solution.

Merci beaucoup.

8 réponses


Amstramgram
Auteur
Réponse acceptée

J'ai finalement trouvé le pourquoi du comment.
C'était le class=UlidGenerator::class, il fallait le chemin complet et pas le ::class.

Bonjour,

Il n'arive pas à instancier ton générateur.
Tu l'as injecté dans le constructeur ?

Hello,
j'ai jamais eu besoin de faire ca jusqu'a present.
Je sais pas trop comment faire mais je vais chercher.

Merci

Bonjour,

Tu injecte ton service dans le constructeur de ta classe en le passant en paramètre du constructeur, puis tu l'assignes à une propriété de la classe.
Ensuite tu peux l'utiliser en faisant $this->ulidGenerator->maMethode().
Un exemple :

class MaSuperFixtures extends Fixture
{
    protected UlidGeneratorService $ulidGenerator;

    public function __construct(UlidGeneratorService $ulidGenerator)
    {
        $this->ulidGenerator = $ulidGenerator;
    }

    public function load(ObjectManager $objectManager)
    {
        $maVar = $this->ulidGenerator->someMethod();
        ...
    }
}

Merci,

mais je ne comprend pas pourquoi j'ai besoin de faire ca car je ne l'utilise nul par dans mes fixtures. L'utilisation de ce service n'est que pour la generation des IDs qui ce trouve dans les entités.

Ah oui, j'avais mal compris le message d'erreur.
C'est un custom id generator.
A quoi ressemble ton annotation dans l'entité ?

Je viens de faire un test rapide sur une entité doctrine.
Tout d'abord, j'importe la classe UlidGenerator dans mon entité :

use Symfony\Bridge\Doctrine\IdGenerator\UlidGenerator;

Puis je modifie mon annotation (d'après la doc symfony)

/**
 * @ORM\Id
 * @ORM\Column(type="ulid", unique=true)
 * @ORM\GeneratedValue(strategy="CUSTOM")
 * @ORM\CustomIdGenerator(class=UlidGenerator::class)
 */
 private $id;

et ça fonctionne lorsque je charge mes fixtures.

C'est exactement ce que j'ai dans mes entités. Je comprend pas. C'est que l'erreur doit provenir d'ailleur.
Je vais continuer à chercher.
Merci !