Hinzufügen einer benutzerdefinierten Vendor-Lib zu Symfony2 autoload

8

Ich habe das schon seit Stunden versucht - und ich finde keine Beiträge, die funktionieren. Ich füge benutzerdefinierte php-Klassen dem Symfony2-Lieferantenverzeichnis hinzu.

Zum Beispiel (andere Lieferantenstruktur kopiert) :

Hersteller / mylib / mylib / src / Mylib / Lib / Class.php

Ich habe dann die root composer.json aktualisiert, indem ich Folgendes hinzugefügt habe:

%Vor%

Ich habe auch eine composer.json in Vendor / mylib / mylib erstellt, die Folgendes enthielt:

%Vor%

Ich habe einen Namespace in Class.php hinzugefügt:

%Vor%

In einem meiner Bündel habe ich folgendes hinzugefügt:

%Vor%

Der Fehler, den ich bekomme, ist:

  

FatalErrorException: Fehler: Die Klasse 'MyLib \ Lib \ MyClass' wurde nicht gefunden   C: \ xampp \ htdocs \ Meine_CMS \ src \ Cms \ CmsBundle \ Entity \ Cms.php Zeile 13

Was mache ich falsch?

    
Green Acorn 25.08.2013, 22:09
quelle

4 Antworten

4

In PHP-Klassen werden automatisch über __autoload

automatisch geladen

Symfony kümmert sich in seinem Class Loader darum, aber in der Tat funktioniert es genauso. Es gibt keinen Hintergrund, der alle Verzeichnisse abtastet, also müssen Sie Ihren Namespace manuell hinzufügen.

Sie müssen Ihre Datei autoload.php hinzufügen:

%Vor%     
takwlasnie 25.08.2013, 22:43
quelle
9

Sie sollten wirklich Service-Container verwenden, was im Prinzip die symfonische Art ist, Klassen zu laden.

Hier ist warum:

  1. Nämlich, ein Dienst wird nie aufgebaut, bis er gebraucht wird.
  2. Best Practice für die Wiederverwendung von Code.
  3. Trennen Sie jeden Teil der Funktionalität in Ihrer Anwendung.
  4. Da jeder Dienst nur einen Job erledigt, können Sie einfach auf jeden zugreifen Service und nutzen Sie seine Funktionalität, wo immer Sie es brauchen.
  5. Jeder Dienst kann seither auch einfacher getestet und konfiguriert werden Es ist von den anderen Funktionen in Ihrer Anwendung getrennt.
  6. Diese Idee wird als serviceorientierte Architektur bezeichnet und ist nicht eindeutig zu Symfony oder sogar PHP.

Ссылка

%Vor%

Symfony kümmert sich im Grunde genommen um die Instanziierung von Klassen für Sie in Ihrem Controller. Alles, was Sie tun müssen, ist folgendes:

Fügen Sie einen Ordner unter Ihrem Pfad namens Bibliotheken - & gt; src / AppBundle / Bibliotheken

Fügen Sie die Klasse zu diesem Ordner mit einem Namespace oben hinzu. Mein Beispiel ist:

%Vor%

Fügen Sie Ihrer App dann eine Datei namens services.yml hinzu. app / config / services.yml

Fügen Sie den folgenden Code ein verwenden Sie keine Tabs in der Yml-Datei

%Vor%

Fügen Sie dann die dritte Zeile Ressourcen: services.yml zu Ihrer Datei config.yml hinzu.

%Vor%

Wenn Sie am oberen Ende des Controllers arbeiten, fügen Sie einfach die Anweisung use

hinzu %Vor%

Ruf jetzt deinen Code an

%Vor%

echo ist out

%Vor%     
Jason 04.01.2015 17:44
quelle
0

Wenn ein anderes Projekt den Autoloader zum Laden seiner Klassen verwendet, z. B. SimpleSAML, und es in der Klasse in einem anderen Namespace verwenden möchte:

%Vor%     
developer 30.06.2015 17:51
quelle
0

Die letzte Antwort ist richtig: Ссылка

Ich arbeite für mich aber wichtig ist, dass dies korrekt ist, aber wenn Sie vor der Installation der Bibliothek und Autoload. In meinem Fall habe ich in Symfony 3.2.x meine Bibliothek en composer.json hinzugefügt:

%Vor%

Und nach dieser Anweisung:

%Vor%

Dann ist alles gut.

Grüße

    
juanitourquiza 16.06.2017 14:47
quelle

Tags und Links