1. Daten zwischen Ansichten teilen
Zusätzlich zur Übergabe bestimmter Daten in einer einzelnen Ansicht ist es manchmal erforderlich, dieselben Daten in allen Ansichten zu übergeben, d. h. wir müssen Daten in verschiedenen Ansichten gemeinsam nutzen. Um dies zu erreichen, müssen Sie die share
-Methode der View Factory verwenden.
Globale Hilfsfunktion view
ähnelt response
. Wenn Parameter übergeben werden, wird die IlluminateViewView
-Instanz zurückgegeben. Wenn keine Parameter übergeben werden, wird die IlluminateViewFactory
-Instanz zurückgegeben. So können wir Daten zwischen Ansichten austauschen, indem wir die folgende Methode in der boot
-Methode des Dienstanbieters verwenden:
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { //视图间共享数据 view()->share('sitename','Laravel学院'); } /** * Register any application services. * * @return void */ public function register() { // } }
Wir definieren zwei Routen in routes.php
:
Route::get('testViewHello',function(){ return view('hello'); }); Route::get('testViewHome',function(){ return view('home'); });
Erstellen Sie dann eine resources/views
-Ansichtsdatei im Verzeichnis home.blade.php
mit folgendem Inhalt:
{{$sitename}}首页
Erstellen Sie eine weitere hello.blade.php
Ansichtsdatei:
欢迎来到{{$sitename}}!
Greifen Sie im Browser auf http://laravel.app:8000/testViewHello
bzw. http://laravel.app:8000/testViewHome
zu, und der Wert von $sitename
kann analysiert werden.
2. Komponisten anzeigen
Manchmal möchten wir bei jedem Rendern der Ansicht bestimmte Daten an die Ansicht binden, z. B. die Informationen des angemeldeten Benutzers. In diesem Fall müssen wir View Composer über die Composer-Methode der Ansicht implementieren Fabrik. Der zweite Rückrufparameter dieser Methode unterstützt zwei Methoden, die auf Controller-Aktionen und Abschlussfunktionen basieren.
Der Einfachheit halber basieren wir weiterhin auf AppServiceProvider
und erstellen keinen separaten Dienstleister. Hier übergeben wir Abschlussparameter (Controller-Aktionen beziehen sich auf das Ansichtsdokument):
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { //视图间共享数据 view()->share('sitename','Laravel学院'); //视图Composer view()->composer('hello',function($view){ $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg')); }); } /** * Register any application services. * * @return void */ public function register() { // } }
Ändern hello.blade.php
Ansichtsdatei:
Willkommen bei {{$sitename}}!
<h3>用户信息</h3> 用户名:{{$user['name']}}<br> 用户头像:{{$user['avatar']}}
Zugriff auf http://laravel.app:8000/testViewHello
im Browser, der Ausgabeinhalt lautet wie folgt:
欢迎来到Laravel学院! 用户信息 用户名:test 用户头像:/path/to/test.jpg
Sie können Daten auch an mehrere Ansichten übergeben:
view()->composer(['hello','home'],function($view){ $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg')); });
Auch alle Ansichten (Platzhalter * verwenden):
view()->composer('*',function($view){ $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg')); });
Im Folgenden finden Sie Einzelheiten zum Datenaustausch zwischen Laravel-Ansichten und View Composer. Ich hoffe, dass dieser Artikel für alle, die Laravel lernen, hilfreich sein wird.