Das Problem
Es war schon immer eine schlechte Praxis von Entwicklern, die Datenbank direkt von den Blade-Dateien aus abzufragen. Laravel
. In Ihrer Vorlagendatei haben Sie zum Beispiel etwas wie das folgende verwendet:
@foreach(App\User::all() as $user) <li>{{$user}}</li> @endforeach
Das mag gut funktionieren, aber Sie rufen direkt die User
Modell innerhalb Ihrer Blade-Datei. Gute Praxis sagt, dass Ihre View-Datei nicht wissen sollte, was innerhalb und außerhalb Ihrer Datenbank passiert.
Wir werden uns ein paar Lösungen ansehen, um dies effizient zu bewältigen.
Lösung # 1 - Pass it from the View
In Ihrem UserController
Methode, die Sie verwenden. Sie können Ihre Variablen wie folgt übergeben
$users = App\User::all(); return view('user',compact('users'));
Dies kann ein Workaround sein, aber stellen Sie sich vor, Sie müssen Benutzer an jede einzelne Ansicht weitergeben, in der Sie Ihre Benutzer anzeigen möchten. Nun, verlieren Sie nicht die Hoffnung, Laravel hat Sie abgedeckt.
Lösung # 2 - View Composers
In Ihrem AppServiceProvider.php
, nutzen Sie Ihre boot()
Methode, um den View Composer an Ihre Anwendung weiterzugeben und ihn dort zu verwenden, wo Sie es wünschen.
public function boot() { \View::share('users',App\User::all()); }
Sie können nun Folgendes verwenden users
Variable in einer beliebigen Blade-Datei Ihrer Anwendung ohne Probleme zu verwenden.
Der Anwendungsfall
Jetzt können Sie einfach in Ihrem file.blade.php
@foreach($users as $user) <li>{{$user}}</li> @endforeach
Schlussfolgerung
Sie können eine separate ServiceProvider
für Ihre View Composers
, aber das ist nicht notwendig, es sei denn, Ihr appServiceProvider
ist überlastet. Spielen Sie damit herum und lassen Sie uns wissen, wenn Sie nicht weiterkommen.
Wenn Ihnen dieser Blog gefallen hat, teilen Sie ihn bitte mit Ihren Entwicklerfreunden. Sie können uns auch folgen auf Twitter.