Verbesserungen rund um Doctrine im Bundle-Generator

in  Generator , , , ,

Verbesserungen rund um Doctrine im Bundle-Generator

Es geht weiter mit den Aufräumarbeiten im Generator von ModuleStudio: nach den im letzten Beitrag beschriebenen Anpassungen rund um PHP 8 liegt aktuell der Fokus auf den Umgang mit Doctrine-Entitäten und -Repositories.

Was wurde gemacht?

Hier eine Auswahl der bereits umgesetzten Änderungen:

  • Repositories liegen nun im Namespace Repository anstatt Entity/Repository.
  • Sämtliche Referenzen zwischen Entitäten und Repositories verwenden nun keine Namespace-Strings mehr, sondern die Foo::class-Notation.
  • Es werden Interfaces für die Repositories generiert, was insbesondere dann wichtig wird, wenn es darum geht, abweichende Implementierungen für Tests zu verwenden.
  • Die Repositories erben von ServiceEntityRepository, um sie einfach via Dependency Injection verwenden zu können. Falls ein Repository von einer anderen Basisklasse erbt (z. B. im Falle der Tree- und Translatable-Extensions), wird statt dessen das dazugehörige ServiceEntityRepositoryInterface implementiert.
  • Auch für die Entitäten gibt es ein EntityInterface, welches hilfreich ist, wenn es darum geht, schnell herauszufinden, ob man gerade die Entität eines bestimmten Bundles hat oder nicht. Vorher musste hierzu der Namensraum untersucht werden. Im generierten Bundle wird dies beispielsweise in einigen Event-Subscribern/-Listenern genutzt.
  • Sämtliche beschriebenen Punkte werden nicht nur für die Repositories der modellierten Entitäten, sondern auch für etwaige Erweiterungen derselben (LogEntries, Translations, Attributes, Categories, usw.) angewendet.

Was wird noch gemacht?

Die Änderungen in diesem Bereich sind noch nicht abgeschlossen. Unter anderem sind hier noch folgende Dinge angedacht:

  • Weitere Nutzungen der Methode EntityFactory#getRepository durch direkte Injection der dazugehörigen Repository-Interfaces ablösen.
  • Ein allgemeines OrderBy-Kriterium in die DSL aufnehmen, um die Standardsortierung im Modell einstellen zu können (analog zu der Möglichkeit zur Steuerung der Sortierung mehrwertiger Relationen).
  • Gut wäre es auch, die select*-Methoden komplett zu eliminieren und statt dessen die Standard-Methoden find* zu erweitern. Hier können auch Standardfilter und -sortierung passend angewendet werden.
  • Bei paginated Results sollte das Repository direkt den Paginator zurückliefern. Der Paginator kann iteriert und direkt an das Template übergeben werden.
  • Auch interessant ist es, Queries zentral in einer privaten Methode vorzudefinieren und dann in mehreren öffentlichen Methoden unterschiedlich verwenden zu können.
  • Außerdem arbeiten wir daran, die Eigenschaft Entity#_objectType unnötig zu machen. Statt auf 'foo' === $entity->get_objectType() zu prüfen, sollte mit instanceof MyEntity gearbeitet werden.

Weitere Beiträge in Kategorie Generator

Der Bundle-Generator bekommt eine Verschlankungskur
- In den letzten Tagen sind die ersten Arbeitsschritte zur weiteren Modernisierung der von ModuleStudio generierten Symfony-Bundles bzw. Zikula-Module umgesetzt worden. Dieser Beitrag zeigt kurz die …
ModuleStudio 1.4.0 wurde soeben veröffentlicht
- Eine neue Version von ModuleStudio steht zum Download auf der Projektseite bereit. ModuleStudio 1.4.0 bringt komplette Unterstützung von Anwendungen für das gestern veröffentlichte Zikula 3 und dem …
Funktionen im Generator zur Versionierung von Daten
- ModuleStudio erlaubt die Nutzung unterschiedlicher Doctrine-Erweiterungen, indem diese im jeweiligen Anwendungsmodell aktiviert und ggf. konfiguriert werden. Neben Baumstrukturen (tree / nested set), …
Neue Generator-Verbesserung zur Darstellung von Geodaten
- Bereits seit einigen Jahren ist es möglich, Entitäten in ModuleStudio als geografisch zu kennzeichnen. Dies führt dazu, dass den entsprechenden Objekten Felder zur Speicherung von Koordinaten …
ModuleStudio 1.3.2 ist jetzt verfügbar
- Eine neue Version von ModuleStudio steht zum Download auf der Projektseite bereit. Wer das Tool bereits nutzt, kann auch die integrierte Update-Funktion nutzen, um das Programm zu aktualisieren. Der …