Questo obiettivo può essere raggiunto con metodi diversi,
1. Utilizzo di BaseController
Per come mi piace impostare le cose, BaseControllercreo una classe che estenda quella di Laravel Controllere lì organizzo varie cose globali. Tutti gli altri controller si estendono quindi da BaseControllerpiuttosto che dal controller di Laravel.
class BaseController extends Controller
{
public function __construct()
{
//its just a dummy data object.
$user = User::all();
// Sharing is caring
View::share('user', $user);
}
}
2. Utilizzo del filtro
Se sai per certo che vuoi qualcosa configurato per le visualizzazioni su ogni richiesta nell'intera applicazione, puoi anche farlo tramite un filtro che viene eseguito prima della richiesta: è così che gestisco l'oggetto Utente in Laravel.
App::before(function($request)
{
// Set up global user object for views
View::share('user', User::all());
});
O
Puoi definire il tuo filtro
Route::filter('user-filter', function() {
View::share('user', User::all());
});
e chiamalo tramite una semplice chiamata di filtro.
Aggiorna in base alla versione 5. *
3. Utilizzo del middleware
Utilizzando il View::shareconmiddleware
Route::group(['middleware' => 'SomeMiddleware'], function(){
// routes
});
class SomeMiddleware {
public function handle($request)
{
\View::share('user', auth()->user());
}
}
4. Utilizzo di View Composer
View Composer aiuta anche a legare dati specifici per la visualizzazione in modi diversi. È possibile associare direttamente la variabile a una visualizzazione specifica oa tutte le visualizzazioni. Ad esempio è possibile creare la propria directory per memorizzare il file del compositore di visualizzazione in base alle esigenze. e questi file del compositore di visualizzazione tramite il servizio forniscono interagiscono con la visualizzazione.
Il metodo di composizione della vista può essere utilizzato in modo diverso, il primo esempio può essere simile:
Potresti creare una App\Http\ViewComposersdirectory.
Fornitore di servizi
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
}
}
Dopodiché, aggiungi questo provider a config / app.php nella sezione "provider".
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}}
Questo metodo potrebbe essere utile solo per View specifici. Ma se vuoi attivare ViewComposer su tutte le viste, dobbiamo applicare questa singola modifica a ServiceProvider.
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer('*',"App\Http\ViewComposers\TestViewComposer");
}
}
Riferimento
Documentazione Laravel
Per ulteriori chiarimenti Episodio Laracast
Se c'è ancora qualcosa di poco chiaro da parte mia, fammi sapere.