IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[5.x] The annotation "@Gedmo\Mapping\Annotation\Timestampable" in [..] was never imported.


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Skunka
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 135
    Par défaut [5.x] The annotation "@Gedmo\Mapping\Annotation\Timestampable" in [..] was never imported.
    Bonjour, bonsoir,

    J'ai plusieurs entités qui possède toutes des traits commun, j'ai donc réalisé un Trait :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <?php
     
    namespace App\Entity\Traits;
     
    use Doctrine\ORM\Mapping as ORM;
    use Gedmo\Mapping\Annotation as Gedmo;
     
    /**
     * SafetyObject
     */
    trait SafetyEntityTraits
    {
        /** TIMESTAMPABLE */
     
        /**
         * @var \DateTime
         *
         * @ORM\Column(type="datetime")
         *
         * @Gedmo\Timestampable(on="create")
         */
        protected $createdAt;
     
        /**
         * @var \DateTime
         *
         * @ORM\Column(type="datetime")
         *
         * @Gedmo\Timestampable(on="update")
         */
        protected $updatedAt;
     
        public function getCreatedAt(): \DateTime
        {
            return $this->createdAt;
        }
     
        public function getUpdatedAt(): \DateTime
        {
            return $this->updatedAt;
        }
     
        public function setUpdatedAt(\DateTime $updatedAt)
        {
            $this->updatedAt = $updatedAt;
        }
     
        /** SAFETY DELETE */
        /**
         * @var \DateTime|null
         *
         * @ORM\Column(type="datetime", nullable=true)
         */
        private $deletedAt;
     
        public function getDeletedAt(): ?\DateTime
        {
            return $this->deletedAt;
        }
     
        public function isDeleted(): bool
        {
            return $this->deletedAt instanceof \DateTimeInterface;
        }
     
        public function recover()
        {
            $this->deletedAt = null;
        }
    }

    Et je l'importe dans une de mes entités :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    <?php
     
    namespace App\Entity;
     
    use App\Repository\FriendRequestRepository;
    use Doctrine\ORM\Mapping as ORM;
    use App\Entity\Traits\SafetyEntityTraits;
    use Gedmo\Mapping\Annotation as Gedmo;
    use Gedmo\Mapping\Annotation\Timestampable;
     
    /**
     * @ORM\Entity(repositoryClass=FriendRequestRepository::class)
     */
    class FriendRequest
    {
        use SafetyEntityTraits;
     
        /**
         * @ORM\Id
         * @ORM\GeneratedValue
         * @ORM\Column(type="integer")
         */
        private $id;
     
        /**
         * @ORM\Column(type="datetime")
         */
        private $date;
     
        /**
         * @ORM\Column(type="boolean")
         */
        private $state;
     
        /**
         * @ORM\ManyToOne(targetEntity=User::class, inversedBy="sentFriendRequests")
         * @ORM\JoinColumn(nullable=false)
         */
        private $sender;
     
        /**
         * @ORM\ManyToOne(targetEntity=User::class, inversedBy="receivedFriendRequests")
         * @ORM\JoinColumn(nullable=false)
         */
        private $receiver;
     
        public function getId(): ?int
        {
            return $this->id;
        }
     
        public function getDate(): ?\DateTimeInterface
        {
            return $this->date;
        }
     
        public function setDate(\DateTimeInterface $date): self
        {
            $this->date = $date;
     
            return $this;
        }
     
        public function getState(): ?bool
        {
            return $this->state;
        }
     
        public function setState(bool $state): self
        {
            $this->state = $state;
     
            return $this;
        }
     
        public function getSender(): ?User
        {
            return $this->sender;
        }
     
        public function setSender(?User $sender): self
        {
            $this->sender = $sender;
     
            return $this;
        }
     
        public function getReceiver(): ?User
        {
            return $this->receiver;
        }
     
        public function setReceiver(?User $receiver): self
        {
            $this->receiver = $receiver;
     
            return $this;
        }
    }

    Quand je souhaite vérifier si ma base est synchro avec mes entités avec la commande
    php bin/console doctrine:schema:validate
    j'obtient l'erreur suivante

    [Semantical Error] The annotation "@Gedmo\Mapping\Annotation\Timestampable" in property App\Entity\FriendRequest::$createdAt was never imported. Did you maybe forget to add a "use" statement for this annotation?
    J'ai pourtant bien importé
    use Gedmo\Mapping\Annotation as Gedmo;
    J'ai récupéré le code ici : https://medium.com/@galopintitouan/u...s-9b516335119b

    J'ai cherché sur stackoverflow et les discussions que j'ai pu voir sont trop anciennes ou n'apportent pas de solutions claires... quelqu'un à une idée ?

    Merci d'avance !

    Skunka.

  2. #2
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Par défaut
    Salut,

    Est-ce que l'annotation fonctionnait correctement avant de créer/d'utiliser ton Trait ?

    Au niveau de la config, vérifie que l'extension Timestamplable est bien activée et paramétrée (cf. https://github.com/Atlantic18/Doctri...tener-services et https://symfony.com/doc/master/bundl...dle/index.html selon comment tu as installé les extensions).

  3. #3
    Membre confirmé Avatar de Skunka
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 135
    Par défaut
    Salut et merci,

    Quand je retire les traits, je n'ai pas de soucis et l'application fonctionne correctement.

    J'ai importé la config que tu m'as link et tenté d'installer le bundle mais j'ai une erreur lors de l'installation:

    Nom : Capture.PNG
Affichages : 2429
Taille : 77,5 Ko

    Si je comprend bien j'ai déjà une autre version du bundle, celui ci s'est installé quand j'ai crée mon projet avec l'option -full de symfony (
    symfony new SharedList --full
    ) pour avoir des packages de base.

    Mon fichier composer.json pour y voir plus clair:

    Code json : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    {
        "type": "project",
        "license": "proprietary",
        "require": {
            "php": ">=7.2.5",
            "ext-ctype": "*",
            "ext-iconv": "*",
            "composer/package-versions-deprecated": "^1.11",
            "doctrine/annotations": "^1.0",
            "doctrine/doctrine-bundle": "^2.1",
            "doctrine/doctrine-migrations-bundle": "^3.0",
            "doctrine/orm": "^2.7",
            "phpdocumentor/reflection-docblock": "^5.2",
            "ramsey/uuid-doctrine": "^1.6",
            "sensio/framework-extra-bundle": "^5.1",
            "symfony/asset": "5.1.*",
            "symfony/console": "5.1.*",
            "symfony/dotenv": "5.1.*",
            "symfony/expression-language": "5.1.*",
            "symfony/flex": "^1.3.1",
            "symfony/form": "5.1.*",
            "symfony/framework-bundle": "5.1.*",
            "symfony/http-client": "5.1.*",
            "symfony/intl": "5.1.*",
            "symfony/mailer": "5.1.*",
            "symfony/mime": "5.1.*",
            "symfony/monolog-bundle": "^3.1",
            "symfony/notifier": "5.1.*",
            "symfony/process": "5.1.*",
            "symfony/property-access": "5.1.*",
            "symfony/property-info": "5.1.*",
            "symfony/security-bundle": "5.1.*",
            "symfony/serializer": "5.1.*",
            "symfony/string": "5.1.*",
            "symfony/translation": "5.1.*",
            "symfony/twig-bundle": "5.1.*",
            "symfony/validator": "5.1.*",
            "symfony/web-link": "5.1.*",
            "symfony/yaml": "5.1.*",
            "twig/extra-bundle": "^2.12|^3.0",
            "twig/twig": "^2.12|^3.0"
        },
        "require-dev": {
            "symfony/browser-kit": "^5.1",
            "symfony/css-selector": "^5.1",
            "symfony/debug-bundle": "^5.1",
            "symfony/maker-bundle": "^1.0",
            "symfony/monolog-bundle": "^3.0",
            "symfony/phpunit-bridge": "^5.1",
            "symfony/stopwatch": "^5.1",
            "symfony/twig-bundle": "^5.1",
            "symfony/var-dumper": "^5.1",
            "symfony/web-profiler-bundle": "^5.1"
        },
        "config": {
            "optimize-autoloader": true,
            "preferred-install": {
                "*": "dist"
            },
            "sort-packages": true
        },
        "autoload": {
            "psr-4": {
                "App\\": "src/"
            }
        },
        "autoload-dev": {
            "psr-4": {
                "App\\Tests\\": "tests/"
            }
        },
        "replace": {
            "paragonie/random_compat": "2.*",
            "symfony/polyfill-ctype": "*",
            "symfony/polyfill-iconv": "*",
            "symfony/polyfill-php72": "*",
            "symfony/polyfill-php71": "*",
            "symfony/polyfill-php70": "*",
            "symfony/polyfill-php56": "*"
        },
        "scripts": {
            "auto-scripts": {
                "cache:clear": "symfony-cmd",
                "assets:install %PUBLIC_DIR%": "symfony-cmd"
            },
            "post-install-cmd": [
                "@auto-scripts"
            ],
            "post-update-cmd": [
                "@auto-scripts"
            ]
        },
        "conflict": {
            "symfony/symfony": "*"
        },
        "extra": {
            "symfony": {
                "allow-contrib": false,
                "require": "5.1.*"
            }
        }
    }

    Désolé du temps de réponse ^^
    Cordialement.

  4. #4
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Par défaut
    Salut,

    Citation Envoyé par Skunka Voir le message
    Si je comprend bien j'ai déjà une autre version du bundle, celui ci s'est installé quand j'ai crée mon projet avec l'option -full de symfony () pour avoir des packages de base.
    D'après ce que je comprends de l'erreur, c'est plutôt le package "doctrine/cache" qui est en conflit avec "doctrine/common", Composer te suggères de supprimer "doctrine/cache" pour pouvoir installer le bundle avec les extensions.

    Cependant dans ton composer.json, je suis surpris de ne pas y trouver le package "gedmo/doctrine-extensions", à mon avis ton application fonctionne car le package doit se trouver dans ton dossier vendor mais tu devrais modifier ton composer.json pour qu'il soit fidèle aux dépendances que tu utilises (à ta place, je corrigerai le composer.json, je supprimerai le composer.lock et tout le dossier vendor puis je relancerai un composer install histoire de repartir d'un truc plus carré).

    Si ça ne change toujours rien à ton erreur, essaye de voir si ça ne vient pas d'un problème de namespace (vérifier s'il n'y a pas de coquilles, supprimer les namespaces importés qui ne sont pas utilisés, etc.).

  5. #5
    Membre confirmé Avatar de Skunka
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 135
    Par défaut
    Salut !

    Tout d'abord désolé du temps de réponse mais j'ai profité de quelques vacances loin de tout :p

    J'ai suivis la démarche que tu m'as décris et le problème s'est résolu laissant place à un second problème lors de la commande
    doctrine:migrations:migrate
    que voici:
    The metadata storage is not up to date, please run the sync-metadata-storage command to fix this issue.
    Pour résoudre ça, je me suis appuyé sur le lien suivant : https://github.com/doctrine/Doctrine...dle/issues/337

    Il suffit de légèrement modifié le fichier .env et le tour est joué, tout fonctionne correctement ! J'ai indiqué l'erreur précédente au cas où quelqu'un se retrouverait dans cette situation.

    En tout cas je te remercie de ton aide !!

    Bien cordialement,
    Skunka.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/08/2015, 10h32
  2. [2.x] The annotation does not exist
    Par taz007_dj dans le forum Symfony
    Réponses: 19
    Dernier message: 21/07/2013, 12h43
  3. Réponses: 1
    Dernier message: 24/12/2012, 16h39
  4. Réponses: 0
    Dernier message: 28/04/2011, 12h24
  5. [JPA][EJB3] The @JoinColumns on the annotated element
    Par *alexandre* dans le forum JPA
    Réponses: 9
    Dernier message: 19/02/2007, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo