2017-04-19 1 views
0

Ich versuche, ein Autoloading-System zu ändern, die ich zuvor geschrieben habe. Ich verwende Composer und im Moment bin ich Autoloader nur eine Bibliothek mit Class Map.Composer Autoload Classmap mit psr-4

"autoload": { 
"classmap": ["libs/"] 
} 

Ich mag einen bA-4-Loader für den Rest der Dateien hinzufügen und in der Lage zu sein, die Dateien unter libs ohne Namensräume zu nennen und ohne „Verwendung“ sie‘eine Art, wie Aliase in Laravel. Das ist, was ich versuche zu tun:

"autoload": { 
"classmap": ["libs/"], 
"psr-4": { 
    "App\\": "" 
} 
} 

So schließlich, wenn in „Libs“ Ich habe die Session-Klasse ich es als ich Aufruf:

Session::get('anything') 

aber jetzt nach dem Versuch, die hinzufügen bA-4 und es innerhalb eines Namespaced Klasse

namespace App\models; 

Class User{ 
function get(){ 
    return Session::get('anything'); 
} 
} 

es wird nicht mehr telefonieren arbeiten, weil es für die Sitzung innerhalb des Benutzers Namensraum aussieht. Ich weiß, dass es viele Frameworks gibt, die es mit Aliasen aus der Box implementieren. Es ist nur so, dass dieses Projekt irgendwie alt ist und ich versuche, es ein wenig zu organisieren und alle Anforderungen loszuwerden - im Moment jeder Modell muss benötigt werden.

+0

'\ Session :: get ('irgendwas');' so verwenden Sie jetzt –

Antwort

0

Ich mag einen bA-4-Loader für den Rest der Dateien hinzufügen und in der Lage zu sein, die Dateien unter libs ohne Namensräume zu nennen und ohne „Verwendung“ sie‘eine Art, wie Aliase in Laravel.

Sie können die Klassen verwenden, ohne entweder use oder das Hinzufügen von dem vollqualifizierten Namespace-Pfad mit dem umgekehrten Schrägstrich beginnend \ hinzufügen. Dies hat nichts mit der Art und Weise zu tun, wie Sie diese Klassen laden, sondern ist eine Grundvoraussetzung von PHP selbst - es gibt also keine Möglichkeit, das Autoloading selbst zu gestalten.

Wie kommentierte ein Backslash Hinzufügen funktioniert, aber dies ist das erforderliche Minimum:

namespace App\models; 
Class User{ 
    function get(){ 
    return \Session::get('anything'); 
    } 
} 
+0

OK, ich kann sehen, es wird nicht passieren aufgrund zu vieler Änderungen .., wie Laravel tut es? Ich meine, sie definieren ein Array von Aliasen, die aufgerufen werden können, genau wie eine Klassenmap. –

+0

Wenn Sie mich auf die Dokumentation von Laravel verweisen können, die erklärt, was Sie wollen, könnte ich Ihre Aufgabe verstehen. Aber ich bezweifle, dass Sie in der Lage sein werden, das zu tun, was Sie wollen, denn selbst Laravel kann nicht gegen die PHP-Syntaxregeln verstoßen. Ich denke, es ist wahrscheinlicher, dass Sie das Laravel-Feature missverstanden haben, aber ich kann es an dieser Stelle nicht beurteilen. – Sven

0

ich beendet habe auf eine andere Klasse zu schreiben, die alle classses Aliasing, das ich will, so kann ich sie nennen aus der Box.

können Sie es hier sehen:

https://github.com/shahafan/SAmvc-App/blob/master/Config/Aliases.php

im Grunde bin ich nur die Funktion php class_alias mit, so kann ich alle Klassen laden, die ich vor der Verwendung möchten. Ich denke, Laravel macht es genauso.

Verwandte Themen