Dieses Ziel kann durch verschiedene Methoden erreicht werden,
1. Verwenden von BaseController
So wie ich Dinge gerne einrichte, mache ich eine BaseController
Klasse, die Laravels eigene erweitert Controller
, und richte dort verschiedene globale Dinge ein. Alle anderen Controller erstrecken sich dann von BaseController
Laravels Controller.
class BaseController extends Controller
{
public function __construct()
{
//its just a dummy data object.
$user = User::all();
// Sharing is caring
View::share('user', $user);
}
}
2. Filter verwenden
Wenn Sie wissen, dass für jede Anforderung in der gesamten Anwendung etwas für Ansichten eingerichtet werden soll, können Sie dies auch über einen Filter tun, der vor der Anforderung ausgeführt wird. So gehe ich mit dem Benutzerobjekt in Laravel um.
App::before(function($request)
{
// Set up global user object for views
View::share('user', User::all());
});
ODER
Sie können Ihren eigenen Filter definieren
Route::filter('user-filter', function() {
View::share('user', User::all());
});
und rufen Sie es durch einfachen Filteraufruf auf.
Update gemäß Version 5. *
3. Middleware verwenden
Mit dem View::share
mitmiddleware
Route::group(['middleware' => 'SomeMiddleware'], function(){
// routes
});
class SomeMiddleware {
public function handle($request)
{
\View::share('user', auth()->user());
}
}
4. Verwenden von View Composer
View Composer hilft auch dabei, bestimmte Daten zu binden, um sie auf unterschiedliche Weise anzuzeigen. Sie können Variablen direkt an eine bestimmte Ansicht oder an alle Ansichten binden. Zum Beispiel können Sie ein eigenes Verzeichnis erstellen, um Ihre View Composer-Datei je nach Anforderung zu speichern. und diese View Composer-Datei über Service bieten Interaktion mit der Ansicht.
Die View Composer-Methode kann auf unterschiedliche Weise verwendet werden. Das erste Beispiel kann ähnlich aussehen:
Sie könnten ein App\Http\ViewComposers
Verzeichnis erstellen .
Dienstleister
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
}
}
Fügen Sie danach diesen Anbieter zu config / app.php im Abschnitt "Anbieter" hinzu.
TestViewComposer
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
class TestViewComposer {
public function compose(View $view) {
$view->with('ViewComposerTestVariable', "Calling with View Composer Provider");
}
}
ViewName.blade.php
Here you are... {{$ViewComposerTestVariable}}
Diese Methode kann nur für bestimmte Ansichten hilfreich sein. Wenn Sie jedoch ViewComposer für alle Ansichten auslösen möchten, müssen Sie diese einzelne Änderung auf ServiceProvider anwenden.
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer('*',"App\Http\ViewComposers\TestViewComposer");
}
}
Referenz
Laravel-Dokumentation
Zur weiteren Klärung Laracast Episode
Wenn mir noch etwas unklar ist, lass es mich wissen.