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: UTF813 14 url: '%env(resolve:DATABASE_URL)%'15 orm:16 auto_generate_proxy_classes: '%kernel.debug%'17 naming_strategy:18 doctrine.orm.naming_strategy.underscore19 auto_mapping: true20 mappings:21 App:22 is_bundle: false23 type: yml24 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: annotation2dir: '%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:
Durch die Auswahl des Eintrages "ORM-Class" fügte PhpStorm der Klasse die erforderlichen Annotations hinzu:
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:
Dieser Ansatz gefällt mir viel besser, als wenn die Zuordnung irgendwo anders versteckt wäre.