Wie kann ich PHP8-Attribute anstelle von Anmerkungen in der Doktrin verwenden?

Lesezeit: 2 Minuten

Benutzeravatar von glm
glm

Das möchte ich verwenden:

#[ORM\Column(type: "string")]

an Stelle von:

/**
 *  @ORM\Column(type="string")
 */

Aber ich bekomme diesen Fehler:

(error: Class 'Column' is not annotated with 'Attribute' )

Liegt es daran, dass Doctrine es noch nicht unterstützt, oder übersehe ich etwas?

  • Welchen Anwendungsfall haben Sie, um solche Anmerkungen verwenden zu müssen? Was versuchst du zu lösen?

    – Hppycoder

    23. März 2021 um 20:32 Uhr

  • Falls Sie Hunderte von Anmerkungen haben und diese Attribute konvertieren möchten, ziehen Sie es vielleicht vor, dies zu automatisieren. Ich habe ein Open-Source-Tool Rector geschrieben, das dieses Upgrade für Sie durchführt: getrector.org/blog/how-to-upgrade-annotations-to-attributes

    – Tomas Votruba

    13. Oktober 2021 um 19:22 Uhr


Benutzeravatar von Denis V
Dennis V

Wie @Seb33300 sagt, ja, das ist es jetzt möglich in Lehre ORM 2.9. Aber für Symfony müssen Sie ein bisschen mehr tun. Hier ist eine vollständige Liste der Upgrade-Schritte:

  1. Doctrine-ORM aktualisieren: "doctrine/orm": "^2.9".

  2. Doktrinenpaket upgraden: "doctrine/doctrine-bundle": "^2.4".

  3. Satz doctrine.orm.mappings.App.type: attribute (standardmäßig ist es auf eingestellt annotation):

    # config/packages/doctrine.yaml
    
    doctrine:
      orm:
        mappings:
          App:
            type: attribute
    
  4. Wenden Sie ähnliche Änderungen auf Ihre Entitäten an:

    --- Dummy.php.old     Mon Jun 07 00:00:00 2021
    +++ Dummy.php         Mon Jun 07 00:00:00 2021
    @@ -7,15 +7,11 @@
     use App\Repository\DummyRepository;
     use Doctrine\ORM\Mapping as ORM;
    
    -/**
    - * @ORM\Entity(repositoryClass = DummyRepository::class)
    - */
    +#[ORM\Entity(repositoryClass: DummyRepository::class)]
     class Dummy
     {
    -    /**
    -     * @ORM\Id
    -     * @ORM\GeneratedValue
    -     * @ORM\Column(type="integer")
    -     */
    +    #[ORM\Id]
    +    #[ORM\GeneratedValue]
    +    #[ORM\Column(type: 'integer')]
         private $id;
     }
    

  • Kritisch ist der Wechsel von „Anmerkung“ zu „Attribut“. Vielen Dank für die Dokumentation.

    – Jason Aller

    10. Juni 2021 um 1:06 Uhr

  • Gibt es eine Möglichkeit, beides zuzulassen, um eine reibungslose Migration für die vorhandenen Attribute zu ermöglichen?

    – die Nüsse

    10. April 2022 um 16:51 Uhr

  • @the_nuts Könntest du einen Weg finden, beides zuzulassen? lass es mich wissen, bitte

    – nas

    15. Dezember 2022 um 12:39 Uhr

  • @nas ja, ich habe ein anderes Verzeichnis erstellt, also was ich drin habe Entity ist immer noch mit anmerkung, und was ich drin habe EntAttribs (konnte keinen besseren Namen finden lol) ist mit Attributen: pastebin.com/VS1jGD8x

    – die Nüsse

    19. Dezember 2022 um 14:16 Uhr

Benutzeravatar von Seb33300
Seb33300

EDIT: Lehre 2.9 ist jetzt freigegeben mit Unterstützung für PHP 8-Attribute!

PHP 8-Anmerkungen wurden in Doctrine ORM zusammengeführt 2.9.x Branche, die noch nicht freigegeben ist:
https://github.com/doctrine/orm/pull/8266

Hier ist die Dokumentationsreferenz zu dieser Funktion:
https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/attributes-reference.html

1440420cookie-checkWie kann ich PHP8-Attribute anstelle von Anmerkungen in der Doktrin verwenden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy