Hallo,
ich bastel mir zur Zeit ein eigenes Framework. Bitte nun keine Meinung darüber das ich das Rad neu erfinden will, ich mach das um zu lernen etc.
Ich hänge aber zur Zeit an einem Problem was ich meiner Meinung nach nicht sauber gelöst bekomme.
Hier ein kleiner Ausschnitt meiner Ordnerstruktur:
Es gibt 2 Hauptordner. Einmal den "application" Ordner wo sich alle Application-Spezifische Dateien wie Controller, Models und View befinden. Und einmal den "Core" Ordner wo sich alle Framework-Dateien befinden die den Ablauf steuern etc.
Nun möchte ich, wie man es in der Struktur erkennen kann, das man im Application Ordner den Core erweitern kann indem man z. B, die Request Klasse überschreibt und erweitert und anpasst.
Die Klasse im Core Ordner sieht wie folgt aus:
Und die Klasse im Application Folder folgendermaßen:
Wenn ich nun also z. B. in der basic.php, welche sich im Core Verzeichnis befindet, die Request Klasse aufrufen möchte muss ich dieses wie folgt machen (Namespace der basic.php ist \Core):
1. Problem ist das ich es unsauber finde das ich im Core Verzeichnis den Application Namespace benutzen muss.
2. Es ist bei der aktuellen Lösung zwingend erforderlich das in dem Application Verzeichnis die Request Klasse vorhanden ist. Ich möchte allerdings eine Lösung finden das dies optional ist, sodass ich die Request.class.php im Application Verzeichnis nur erstellen muss wenn ich diese wirklich überschreiben will. Wenn ich die Datei nun löschen würde, versucht die basic.php nun weiterhin die Datei im Application Verzeichnis zu finden.
Man könnte in der basic.php zwar \Core\Library\Request verwenden, wenn man dann allerdings den Core erweitern möchte und im Application Verzeichnis die Klasse überschreibt müsste man die basic.php anpassen, was ich vermeiden möchte, da sich diese im Core Verzeichniss befindet. Es sollte halt automatisch erkannt werden.
PS: Ich nutze einen selbstentwickelten Autoloader der auch mit Namespaces umgehen kann. Eine Lösung dahingehend das der Autoloader erst versucht im Application Verzeichnis zu suchen sehe ich eher nicht, da die Request Klasse im Application Verzeichnis einen anderen Namen hat als die Request Klasse im Core Verzeichnis (wegen den Namespaces)
Ich hoffe ich konnte mein Problem einigermaßen verständlich erklären und hoffe das jemand eine saubere Lösung dafür kennt.
Gruß
ich bastel mir zur Zeit ein eigenes Framework. Bitte nun keine Meinung darüber das ich das Rad neu erfinden will, ich mach das um zu lernen etc.
Ich hänge aber zur Zeit an einem Problem was ich meiner Meinung nach nicht sauber gelöst bekomme.
Hier ein kleiner Ausschnitt meiner Ordnerstruktur:
Code:
- application - - core - - - Request.class.php - core - - library - - - Request.class.php - basic.php
Nun möchte ich, wie man es in der Struktur erkennen kann, das man im Application Ordner den Core erweitern kann indem man z. B, die Request Klasse überschreibt und erweitert und anpasst.
Die Klasse im Core Ordner sieht wie folgt aus:
PHP-Code:
namespace Core\Library;
class Request
{
}
PHP-Code:
namespace Application\Core;
final class Request extends \Core\Library\Request
{
}
PHP-Code:
new \Application\Core\Request();
2. Es ist bei der aktuellen Lösung zwingend erforderlich das in dem Application Verzeichnis die Request Klasse vorhanden ist. Ich möchte allerdings eine Lösung finden das dies optional ist, sodass ich die Request.class.php im Application Verzeichnis nur erstellen muss wenn ich diese wirklich überschreiben will. Wenn ich die Datei nun löschen würde, versucht die basic.php nun weiterhin die Datei im Application Verzeichnis zu finden.
Man könnte in der basic.php zwar \Core\Library\Request verwenden, wenn man dann allerdings den Core erweitern möchte und im Application Verzeichnis die Klasse überschreibt müsste man die basic.php anpassen, was ich vermeiden möchte, da sich diese im Core Verzeichniss befindet. Es sollte halt automatisch erkannt werden.
PS: Ich nutze einen selbstentwickelten Autoloader der auch mit Namespaces umgehen kann. Eine Lösung dahingehend das der Autoloader erst versucht im Application Verzeichnis zu suchen sehe ich eher nicht, da die Request Klasse im Application Verzeichnis einen anderen Namen hat als die Request Klasse im Core Verzeichnis (wegen den Namespaces)
Ich hoffe ich konnte mein Problem einigermaßen verständlich erklären und hoffe das jemand eine saubere Lösung dafür kennt.
Gruß
Kommentar