Ich habe Probleme mit Namespaces im Zend Framework (zumindest denke ich, dass es ein Namespace-Problem ist).
Ich möchte PHPExcel in mein Zend-Projekt integrieren. Relevante Dateistruktur ist wie folgt:
%Vor%Benutzerdefinierte Klassen funktionieren nach
%Vor%im Bootstrap. Diese Klassen heißen ABCD_blahdeblah.
Allerdings macht es registerNamespace ('PHPExcel_') nicht hilfreich, Zend die geeigneten Klassen zu finden. Wenn ich es versuche
%Vor%in der Steuerung, bekomme ich einen Fehler "Klasse nicht gefunden". Ich vermute, dass dies entweder daran liegt, dass Klassen in PHPExcel nicht mit dem Namespacepräfix benannt sind, oder weil die Hauptdatei PHPExcel.php außerhalb des Namensbereichs liegt, den ich gerade deklariert habe. Die PHPExcel-Struktur verlangt jedoch, dass sie im übergeordneten Verzeichnis des Rests der class / font / etc-Dateien sitzt.
Alle Hinweise würden sehr geschätzt werden.
Vielen Dank im Voraus.
Erstellen Sie einen Autoloader für PHPExcel und fügen Sie ihn zum Zend Autoloader Stack hinzu.
In library/My/Loader/Autoloader/PHPExcel.php
:
Und in application/configs/application.ini
:
Dann in application/Bootstrap.php
:
Dann sollten Sie in der Lage sein, PHPExcel - sagen wir, in einem Controller - mit einem einfachen:
zu instanziieren %Vor% Das einzige Problem ist, dass PHPExcel alle seine Abhängigkeiten innerhalb eines eigenen Ordners lädt. Wenn das intelligent gemacht wird - entweder mit Calls wie require_once basename(__FILE__) . '/someFile.php'
oder mit einem eigenen Autoloader, der dem Zend Autoloader irgendwie nicht im Weg steht - dann sollte alles cool sein. #famouslastwords
Heutzutage ist der Komponist ein häufig verwendetes Werkzeug, das 2012 nicht so populär war. Sogar ältere Projekte, die in ZF1 gebaut wurden, können den Komponisten und seinen Autoloader verwenden.
Wie erhalten Sie all Ihre Bibliotheken zum Laufen, ohne dass Sie jedes Mal benutzerdefinierte Autoloader zu Ihrer application.ini
hinzufügen müssen?
Beginnen Sie zuerst mit der Einrichtung von composer.json . Nach der Erstellung führen Sie composer install
aus, um alle erforderlichen Pakete zu sammeln und den Autoloader des Composers zu erstellen.
Jetzt aktualisieren wir die public/index.php
Ihres Projekts. Von nun an werden alle Anforderungen, die über den Composer geladen werden, automatisch geladen.
Versuchen Sie, den PHPExcel Autoloader zu ändern:
Hinzufügen
%Vor%als die ersten beiden Zeilen der Register () -Methode in /Classes/PHPExcel/Autoloader.php, unmittelbar vor
%Vor%Ich hatte ein ähnliches Problem mit einer exel-Bibliothek (phpxls) und einer pdf-Bibliothek (fpdf) und nach ein paar verschiedenen Versuchen habe ich mich damit begnügt, die benötigte Datei manuell aus der Bibliothek aufzunehmen und von dort zu gehen. Booth phpxls und fdpd können dann alles andere handhaben, ohne die zend Autoloader-Methoden zu stören.
Ein psudo_code Beispiel würde so aussehen, wo ich ein Objekt der gewünschten Klasse zurückgebe und dann weiter damit arbeiten kann. Du könntest natürlich Dinge in den Konstruktor aufnehmen und daraus bauen.
%Vor%Diese Lösung ist vielleicht nicht so elegant, aber ich fand, dass dies der einfachste Weg war, verschiedene Typen von Bibliotheken nebeneinander zu aktivieren, ohne dass unterschiedliche Autoloader oder magische Funktionen miteinander interferierten.
Tags und Links namespaces zend-framework phpexcel