Laravel 4-Aliase in benutzerdefinierten Klassen
ich den alias verwenden möchten-Klassen auf laravel 4 "Fassaden", wie die App::Methode , Config::Methode.
Gut das Ding ist, dass ich das erstellen einer benutzerdefinierten Klasse und ich habe zum importieren des namespaces wie
<?php
namespace Face\SocialHandlers;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Config;
class FacebookHandler implements SocialHandlerInterface {
public function registrar($perfil) {
Config::get('facebook');
}
}
gibt es eine Möglichkeit, diese Klassen verwenden wie Controller oder Routen, die Dateien des Frameworks ?
wie
<?php
namespace Face\SocialHandlers;
//use Illuminate\Support\Facades\App;
//use Illuminate\Support\Facades\Config;
class FacebookHandler implements SocialHandlerInterface {
public function registrar($perfil) {
Config::get('facebook');
}
}
Cya
ps: sry für mein Englisch
- wo ist diese Klasse wird verwendet ??
- ich Bearbeiten Sie die post, um mehr klar sein
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
use Config;
anstelle der ausführlicherenuse Illuminate\Support\Facades\Config;
und der autoloader behandeln soll, ist es richtig.Nur als Tipp, sollten Sie sich nicht fest, welche Abhängigkeiten in Ihrem code. Anstatt die Fassaden, Sie könnte einen
"ConfigInterface"
um die gemeinsamen Abhängigkeiten, die Sie brauchen. Dann erstellen Sie eine"LaravelConfig class"
(Oder Laravel4Config.php) und implementieren Sie diese Methoden.Für eine Schnelle Lösung die Antwort, "fangen die underliying Fassade Instanz":
Für eine Wirkliche Antwort, vielleicht mühsam, aber gut auf die Dauer, statt der Verwendung der Fassaden erfolgt über eine Schnittstelle.
Dann
Und Ihren Code
Diese Weise, wenn Sie möchten, dass ein Wechsel zwischen den Rahmenbedingungen, die Sie gerade brauchen, um erstellen Sie eine
SocialConfigInterface
Umsetzung, oder sich vorstellen, das Szenario, in dem Laravel 5 nicht verwenden Fassaden, Sie wollen, dass Ihr code, um unabhängig zu sein von "Außenseiter-änderungen" das ist inversion of control, IoCErsten Lauf,
Dies wird fügen Sie Ihrer Klasse namespace
vendor/composer/autoload_classmap.php
. Jetzt suchen Sie den Eintrag für Ihre Klasse in diesem classmap-array und bekommen den entsprechenden namespace von dort.Beispielsweise bekommen Sie so etwas wie,
Für diesen bestimmten Eintrag, dem Sie einen alias in
app/config/app.php
Auf die gleiche Weise suchen Sie Ihre Eingabe und verwenden Sie einen alias in
app/config/app.php
.app.php
ohne using namespace. Das Beispiel istConfig::
. So können Sie definieren Sie Ihre Klasse auch. Wenn alias nicht definiert ist, müssen Sie den namespace in bestimmten controller. Warum Sie versuchen, zu löschen laravel s eingebauten alias?app/customFolder/MyClass.php
( Beispiel ) , wenn da nenne ich zum BeispielConfig::
laravel erzählt mir, dass er nicht die Klasse zu finden , so muss ich hinzufügen, die use-Anweisung für den import dieser Klasse . Was ich tun ist, gehen Sie zu derapp.php
gehen Sie auf diealiases array
ein Blick auf die alias-namespace, dann nutze ich das Namensraum-alias auf meine benutzerdefinierte Klasse. Im Fall vonApp:_
, schaue ich in die aliases-array'App' => 'Illuminate\Support\Facades\App',
und in meine eigene Klasse importieren Sie Sie überuse 'Illuminate\Support\Facades\App',
Müssen Sie nur einen Ordner zu erstellen, oder fügen Sie eine Klasse, wo bereits die Liste für die autoload. Mich, zum Beispiel, haben diese Klasse
PDFMaker
, dass verwendet eine DomPDF Laravel Umsetzung. Ich erstellt einen Ordner mit dem Namenlibraries
und setzen Sie den Pfad zu (unter derapp
Ordner) in derautoload:classmap
- Taste aufcomposer.json
Ich Tat das gleiche mit
commands
für Handwerker-Befehle! Wenn Sie das tun, müssen Sie nur erklären, ein neues Objekt für jede Klasse, die unter diesem Ordner, oder rufen Sie es in einer statischen Weise, wenn die Klasse definiert statische Methoden. So etwas wieClass::method
.Hoffe, es hilft dir noch einen schönen Tag! 😀
EDIT: Danach nicht vergessen, die
dump-autoload
für die Platzierung der neuen Klasse, in die autoload-Bereich.EDIT 2: denken Sie Daran, dass, sobald Sie haben, legen Sie die Klasse auf autoload, wird es im selben Bereich der anderen, so dass Sie nicht haben, um es zu importieren, um andere, weder anderen, um es!
Config::
so, weil es schon importiertapp.php
.use blablabla
und auf die Kind-Klassen, die ich verwenden kann, die Einfuhren von der übergeordneten Klasse =D ?composer.json
auf dieautoload
Schlüssel, wie ich bereits erwähnt auf der EDIT 2 auf die gleiche Antwort.composer.json
's autoload:classmap?app/Face
innen habe ich 2 extra Ordnerapp/Face/Servicios
undapp/Face/SocialHandlers
sowie Klassen innerhalbapp/Face/Servicios
verwendennamespace Face\Servicios;
und Klassen innerhalbapp/Face/SocialHandlers
verwendennamespace Face\SocialHandlers;
Können Sie auch das Präfix der Klasse Namen, die mit einem umgekehrten Schrägstrich, um die Nutzung des global namespace:
\Config::get('facebook')
und\App::someMethod()
arbeiten, ohne die Notwendigkeit, fügen Sie eineuse
- Anweisung, unabhängig von der Datei-Namensraum.