Doctrine Annotations in Sylius benutzen | Arroba IT
Zum Inhalt springen
sylius doctrine

Doctrine Annotations in Sylius benutzen

16. Dez 2018

Räum Dein Projekt auf

Als Sylius- und Symfony-Neuling bin ich mit den vielen Konfigurationsdateien überfordert und habe mich dazu entschlossen, diese zu reduzieren, indem ich die Datenbank-Mappings innerhalb meiner Modelle mit Doctrine Annotations abbilde. Da Sylius die Verwendung von YAML oder XML empfiehlt (aus Gründen, die ich nicht kenne), gibt es keine Dokumentation darüber, wie man zu Annotations wechselt. Nach einigem Ausprobieren habe ich es dann aber doch hinbekommen.

Unter der Haube verwendet Sylius Doctrine ORM, um seine Modelle auf die Datenbank abzubilden. Doctrine bietet drei Möglichkeiten, die Mapping-Konfiguration zu definieren:

  • Yaml

  • XML

  • Annotations

Ein neues Sylius-Projekt verwendet standardmäßig *.yaml Dateien, die sich in Resources/config/doctrine/ befinden. Dies wird in config/packages/doctrine.yml ganz unten konfiguriert.

1parameters:
2 # Adds a fallback DATABASE_URL if the env var is not set.
3 # This allows you to run cache:warmup even if your
4 # environment variables are not available yet.
5 # You should not need to change this value.
6 env(DATABASE_URL): ''
7 
8doctrine:
9 dbal:
10 driver: 'pdo_mysql'
11 server_version: '%env(resolve:DATABASE_SERVER_VERSION)%'
12 charset: UTF8
13 
14 url: '%env(resolve:DATABASE_URL)%'
15 orm:
16 auto_generate_proxy_classes: '%kernel.debug%'
17 naming_strategy:
18 doctrine.orm.naming_strategy.underscore
19 auto_mapping: true
20 mappings:
21 App:
22 is_bundle: false
23 type: yml
24 dir: '%kernel.project_dir%/src/Resources/config/doctrine'
25 prefix: 'App\Entity'
26 alias: App

In dieser Datei gibt es nur zwei Änderungen zu erledigen:

  • annotation als Typ verwenden

  • Den Pfad vom Ordner mit den Konfigurationsdateien auf den Ordner mit den Entitäten/Modellen ändern

1type: annotation
2dir: '%kernel.project_dir%/src/Entity'

Als letzten Schritt musste ich die Annotationen zu allen meinen Modellen hinzufügen. Dies ist mit PhpStorm und dem aktivierten Symfony Plugin überraschend einfach. Mit dem Cursor innerhalb der Klasse habe ich Strg + Enter eingeben, um dieses Menü zu erhalten:

Screenshot des beschriebenen PhpStorm MenüsDurch die Auswahl des Eintrages "ORM-Class" fügte PhpStorm der Klasse die erforderlichen Annotations hinzu:

Screenshot der hinzugefügten Annotationen.In diesem Fall ist der Name der Datenbank nicht korrekt, da PhpStorm den Namen einfach aus dem Modell ableitet. Ich musste ihn in sylius_product ändern. Mit dem Menüpunkt ORM Annotation hilft PhpStorm dann noch, die Mapping-Konfigurationen zu den Klasseneigenschaften zu generieren:

Screenshot der Annotationen über den Klasseneigenschaften.Fazit:

Dieser Ansatz gefällt mir viel besser, als wenn die Zuordnung irgendwo anders versteckt wäre.