2 Stimmen

Verwendung von zwei verschiedenen Verzeichnissen für denselben Namespace in Zend Framework 2 - Anleitung?

Ich habe ein ZF2-Modul und gleichzeitig verwende ich Propel-generierte Modelle, die im root-verzeichnis/generated-classes gehostet sind. Kann ich sie im selben Namespace teilen - wie Buchhandlung oder so?

Von Zend\Loader\StandardAutoloader sehe ich:

public function registerNamespace($namespace, $verzeichnis)
{
    $namespace = rtrim($namespace, self::NS_SEPARATOR) . self::NS_SEPARATOR;
    $this->namespaces[$namespace] = $this->normalizeDirectory($verzeichnis);
    return $this;
}

wenn ich also zwei Verzeichnisse in Module.php angebe, wird das letzte überwiegen.

Es gibt auch:

public function setFallbackAutoloader($flag)
{
    $this->fallbackAutoloaderFlag = (bool) $flag;
    return $this;
}

Kann ich darauf zurückgreifen und wie kann ich diese Option nutzen? Gibt es andere (bessere) Möglichkeiten?

3voto

edigu Punkte 9558

Ich würde meine Modelle nicht direkt in /your-application/root setzen. Dies würde gegen die empfohlene Verzeichnisstruktur von ZF2 verstoßen. Stattdessen würde ich ein Verzeichnis /FooModule/src/FooModule/Model erstellen und all meine Modelle in diesem Ordner mit der Verwendung von namespace FooModule\Model im Model-Klassen verwenden.

Ein weiteres Detail ist; zwei verschiedene Verzeichnisse für dasselbe Namespace anzugeben ist eine absolut schlechte Idee. Dies würde gegen den PSR-4 Autoloading Standard und viele Open-Source-Bibliotheken & Frameworks einschließlich dem Zend Framework 2 verstoßen, die stark von diesem Standard abhängen.

Ich würde das Problem aus einem anderen Blickwinkel betrachten. Einfach fragen: Warum muss ich einen meiner Namespaces auf zwei verschiedene Verzeichnisse verweisen?

Ich denke eigentlich, dass Sie mit "Propel generierte Modelle" tatsächlich "Domänenentitäten" meinen. Wenn das korrekt ist (ich meine Bookstore) ist eine Entität anstatt ein Modell. Sie können auch dieses großartige Antwort lesen.

Sie können also versuchen, einen Entity Namespace in Ihrem Application (oder was auch immer) ZF2-Modul zu erstellen und Ihre Entity-Klassen unter einem Unter-Namespace darin zu schreiben. Dies ist völlig gültig. Zum Beispiel:

Application\src\Entity\Bookstore.php - Namespace ist Application\Entity
Application\src\Entity\Book.php - Namespace ist Application\Entity
Application\src\Entity\Author.php - Namespace ist Application\Entity

Oder dieses Szenario ist auch gültig (Bookstore ist ein Modul):

Bookstore\src\Entity\Book.php - Namespace ist Bookstore\Entity
Bookstore\src\Entity\Author.php - Namespace ist Bookstore\Entity

In beiden Beispielszenarien teilen Book.php und Author.php Ihren automatisch generierten Domänen-Entitäten den gleichen Namespace, ohne die ZF2- oder PSR-4-Autoloading-Mechanismen zu beeinträchtigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X