Ich versuche, einen Weg zu finden, die Symfony 2 Komponente Dependency Injection zu verwenden die neuen PHP 5.4 Merkmale .
Um eine lange Geschichte kurz zu machen (nicht so kurz, eigentlich), hat mein Projekt View-Klassen entkoppelt, die alle ihren eigenen, spezifischen Konstruktor haben. Jede Ansicht kann keine oder mehrere Ansichtshelfer verwenden, die als Merkmale definiert sind:
%Vor%-
%Vor% Ich hätte gerne eine Methode in meinem Controller, renderView()
, die die Setter-Injection basierend auf allen Eigenschaften durchführt, die von der View-Klasse verwendet werden, bevor die Ansicht gerendert wird:
Irgendeine Idee, wie man das mit der DependencyInjection
Komponente macht?
Das Hauptproblem besteht offensichtlich darin, dass die Ansichten nicht vom DI-Container erstellt werden, sondern an beliebiger Stelle im Anwendungsablauf erstellt werden können. Die Abhängigkeiten müssen erst injiziert werden, bevor sie gerendert werden.
Eine letzte Anmerkung: Ich bin nicht an die Symfony-Komponente gebunden. Jede Ableitung in einem anderen DI-Container würde ebenfalls geschätzt werden.
Ich denke, dass Eigenschaften nicht dazu gedacht sind, DI auf diese Weise zu machen. Was ich in einem ähnlichen Szenario tun würde, wäre die Konstruktorinjektion (oder sogar Setter wäre in Ordnung, selbst wenn der Konstruktor besser wäre) in der Ansichtsklasse, die Eigenschaften implementiert, um die benötigten Dienste direkt zu injizieren.
Wenn Sie daran denken, dass die von einer Klasse implementierten Merkmale statisch definiert sind, bevor die Anwendung ausgeführt wird, müssen Sie die Merkmale nicht wirklich untersuchen, um eine dynamische Injektion durchzuführen. Sie werden wissen, welche Dienste Sie vor dem Ausführen benötigen, denken Sie einfach daran, Eigenschaften zu haben, als wären sie Schnittstellen mit einer konkreten Methode.
Tags und Links php dependency-injection symfony