laravel benutzerdefinierte Klassen alias hinzufügen
So, ich möchte hinzufügen eines alias für benutzerdefinierte Klassen, um in der Lage sein, um Sie in blade:
<?php
namespace App\Classes;
class Requirement
{
public static function Test()
{
return "hello";
}
}
In config/app.php
ich habe einen alias wie folgt:
...
'Requirement' => App\Classes\Requirement::class
Dann, ich möchte in der Lage sein, es zu nennen in einem blade-Vorlage wie
{{ Requirement::Test() }}
Aber der alias funktioniert nicht irgendwie. Ich habe auch versucht composer dump-autoload
, aber es funktioniert immer noch nicht.
BTW: Ist das hinzufügen von benutzerdefinierten Klassen wie, dass ein gangbarer Weg zu implementieren, die site-spezifische Logik, wie das abrufen und verarbeiten von Daten von einer Datenbank oder gibt es einen besseren Ansatz?
Bearbeiten 1
Ich erstellt Requirement.php
im app/Facades
mit folgendem Inhalt
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Requirement extends Facade{
protected static function getFacadeAccessor() { return 'Requirement'; }
}
Hinzugefügt PageContentProvider.php
im app/Providers
mit folgendem Inhalt
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class PageContentProvider extends ServiceProvider
{
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind('Requirement', function($app){
return new \App\Classes\Requirement();
});
}
}
und in config/app.php
den alias
'Requirement'=>App\Facades\Requirement::class
sowie der Anbieter
App\Providers\PageContentProvider::class
aber es funktioniert immer noch nicht.
Edit 2
Durch hinzufügen von etwas wie
exit();
oder
echo "blabla";
innen register()
, ändert sich nichts. Nicht, dass PageContentProvider
ist auch nicht immer geladen?
Edit 3
Da die standard - AppServiceProvider
geladen wird, Lösch ich den jeweiligen Eintrag der AppServiceProvider
im config/app.php
... und es noch funktionierte! Irgendwie sind meine änderungen nicht angewendet. Hat jemand Lösung dafür?
InformationsquelleAutor VGD | 2015-09-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Problem war nicht der code:
Nach der Realisierung, dass die Veränderungen in
config/app.php
nicht angewendet werden, eine einfacheFeste buchstäblich jeder Ausgabe stellte ich in meiner Frage.
InformationsquelleAutor VGD
Hinzufügen, um Ihre composer-Datei:
Dann fügen Sie zu Ihrem Pseudonym schrieben Sie in Ihrem config/app.php
Dann werden Sie in der Lage zu verwenden Sie in Ihren Vorlagen:
Auch mit dem alias? Getestet habe ich mit laravel 5.1 und es funktioniert. Versuchen, erstellen Sie eine Datei im app-Verzeichnis, benennen Sie es um etwas, schreiben Sie einfachen Methode: function helloWorld() {echo 'hello'} . Hinzufügen, um die autoload-Dateien-array, dann
composer dump-autoload
, call helloWorld() wo auch immer - zu prüfen, ob es das laden von Dateien ist das problem selbst.Auch versuchen mit zu
app/Classes/Requirement.php
, könnte es sein, casesensitive, wenn Sie unter linux/unixdas funktioniert.Seltsam... Unter Windows 7
wenn das nicht klar: der Aufruf helloWorld() gearbeitet, aber nicht den Aufruf der Klasse
InformationsquelleAutor Iamzozo
Versuchen Sie dies, wenn das funktioniert:
In Ihrem controller:
Ihrer Ansicht:
Konnten Sie Holen sich die Daten in Ihrer db speichern Sie es dann in eine variable übergeben, in der Sie Ihre Ansicht.
InformationsquelleAutor aldrin27
Haben Sie versucht, mit ein slash?
EDIT: Grammatik
InformationsquelleAutor Borja Marco
Was du suchst ist Fassaden.
Erstellen Sie eine Fassade-Klasse enthält eine Referenz auf Ihre Klasse s-Bindung in den service-container, und das ist, was Sie verwenden in der
aliases
array in Ihrem config/app.php Datei.Dokumentation: http://laravel.com/docs/5.1/facades
funktioniert nicht, siehe Edit 1
kleine Randnotiz: wenn ich mir etwas wie exit() oder echo ("blabla" in register() des Anbieters, passiert nichts - sieht aus wie der Anbieter wird nicht immer geladen.
Du bist immer noch etwas falsch. Sie müssen nicht fügen Sie die Klasse, um die
aliases
array, fügen Sie dem Namen der Fassade - Klasse, die den Verweis enthält, um Ihre Klasse in der service-container.Entweder bin ich dumm oder ich verstehe nicht, was du versuchst zu sagen: "Meine Fassade-Klasse, die auf meine Fassade ist genannt, Anforderung, genauso wie die normale Klasse. So dass ich bin Verweis auf die Fassade-Klasse in den alias.
InformationsquelleAutor Martin Bean
Da Sie erwähnten, dass Sie benötigt eine Klasse in Blade:
Anstelle der Einrichtung eines alias können Sie mit dem blade
@inject
Funktion an der Spitze der Klinge-Datei.Dann in die Klinge Vorlage:
InformationsquelleAutor Douglas.Sesar