Questo obiettivo può essere raggiunto con metodi diversi,
1. Utilizzo di BaseController
Per come mi piace impostare le cose, BaseController
creo una classe che estenda quella di Laravel Controller
e lì organizzo varie cose globali. Tutti gli altri controller si estendono quindi da BaseController
piuttosto 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::share
conmiddleware
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\ViewComposers
directory.
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.