Tach!
Verständlicher?
Zumindest glaub ich, weiß ich jetzt, wo ich mich in die Irre führen ließ. Und meine Antwort ist nun bezogen auf deine Frage im Ausgangsposting
Wie löst Ihr das bezogen auf MVC?
Ich erfinde kein MVC-Framework, ich nehm einfach eines der vielen vorhandenen. Welches davon das beste ist, ist stets eine subjektive Entscheidung. Dazu muss man sie aber erstmal ausprobieren. Zumindest das Tutorial sollte man mal durchspielen, um einen Eindruck zu bekommen. Wenn man nach "PHP Framework" sucht, bekommt man auch Vergleiche, Aufzählungen und Ranking zu sehen. Vor nicht allzulanger Zeit war Yii auf einer der Seiten auf Platz 1, nun ist es wohl Laravel. Ich habe mir früher mal das Zend Framework angeschaut, aber das gefällt mir nicht mehr. Zu viele tausendmal verschachtelte Konfigurationsarrays war das letzte was ich sah, bevor ich ihm den Rücken zuwandte. Die anderen großen, Symfony und CakePHP, gefielen mir auch nicht, die Gründe sind in Vergessenheit geraten. Mit Yii(1) hab ich mal ein Projekt gemacht. Das sah erstmal gut aus, krankte aber auch an der einen oder anderen Eigenschaft. Seitdem hab ich kein PHP-Projekt angefangen, das ein Framework benötigt. Und so hatte ich keinen Bedarf, mich umzuschauen und kann dir grad nicht sagen, welches ich aktuell nehmen würde. Deshalb bleibt nur der der allgemeine Rat: Schau dir die vorhandenen an. Selbst wenn du dann immer noch ein eigenes erfinden willst, kannst du dir bei den existierenden den Aufbau, die Arbeitsweise und andere Ideen abschauen.
Mein Hauptkriterium, ein Framework abzulehnen, scheint nur eine unbedeutende Kleinigkeit zu sein: wenn zu viel mit Strings gearbeitet werden muss und damit eigentlich Bezeichner gemeint sind.
$config = array(
'foo' => 'FooController'
);
In diesem Beispiel verlangt das Framework, dass ich einen Konfigurationswert namens "foo" definieren muss, der den Namen einer Klasse enthalten soll. Ich kann das "foo" nicht von meiner IDE autovervollständigen lassen. Stattdessen muss ich den Namen aus der Dokumentation kennen und ihn dann selbst eintippen - weil es ein String ist. "FooController" ist ein Klassenname, den ich aber auch nicht autovervollständigen kann, weil er ebenfalls als String übergeben werden muss. Die IDE hat in dem Fall keine Ahnung, dass dieser String einen Klassennamen darstellt und ich kann da kein "Go to definition" verwenden oder ein Umbenenen ausführen, bei dem die IDE alle Vorkommen selbständig finden und ändern kann. Strings sind da meist und aus gutem Grund ausgeklammert. Gut, zumindest ein Punkt lässt sich heutzutage - sprich seit PHP 5.5 - lösen. KlassenName::class liefert den Namen der Klasse als String, und damit habe ich in meinem Code einen echten Bezeichner und keinen String mehr, auch wenn das Framework selbst zu doof ist, mit richtigen Bezeichnern umzugehen und unbedingt Strings haben will.
Strings sind Mist, aber nicht überall lassen sie sich vermeiden (eine URL beispielsweise lässt sich schlecht als Bezeichner formulieren). An den Stellen nehm ich dann lieber in Kauf, dass ich mir eine Konstante oder eine zusätzliche Variable definiere.
Also, wie gesagt: Schau dir die vorhandenen Frameworks an. Es gibt nicht nur einen richtigen Weg, ein bestimmtes Problem zu lösen, es gibt verschiedene Philosophien, Herangehensweisen und Lösungsmuster. In den großen Frameworks steckt sehr viel Erfahrung drin. In der Regel sind sie auch nicht wie Korsetts gebaut, sondern eher wie das Seil am Berg, an dem man sich entlanghangeln kann, aber nicht muss. Man muss nicht alles selbst nacherfinden und nur aus den eigenen Fehlern lernen, man lernt auch bei der Benutzung von anderer Software eine Menge kennen. Es ist wie beim Sprechenlernen, erstmal einfach nachmachen, was die Eltern da labern. Man kommt mit der Zeit dahin, eigene Gedanken so formulieren zu können, dass es sich richtig anhört.
dedlfix.