Cet objectif peut atteindre par différentes méthodes,
1. Utilisation de BaseController
La façon dont j'aime mettre les choses en place, je crée une BaseController
classe qui étend celle de Laravel Controller
et j'y installe diverses choses globales. Tous les autres contrôleurs s'étendent alors à partir BaseController
du contrôleur de Laravel plutôt que du contrôleur.
class BaseController extends Controller
{
public function __construct()
{
//its just a dummy data object.
$user = User::all();
// Sharing is caring
View::share('user', $user);
}
}
2. Utilisation du filtre
Si vous savez pertinemment que vous voulez quelque chose de configuré pour les vues sur chaque demande dans toute l'application, vous pouvez également le faire via un filtre qui s'exécute avant la demande - c'est ainsi que je traite l'objet User dans Laravel.
App::before(function($request)
{
// Set up global user object for views
View::share('user', User::all());
});
OU
Vous pouvez définir votre propre filtre
Route::filter('user-filter', function() {
View::share('user', User::all());
});
et appelez-le via un simple appel de filtre.
Mise à jour selon la version 5. *
3. Utilisation du middleware
Utiliser le View::share
avecmiddleware
Route::group(['middleware' => 'SomeMiddleware'], function(){
// routes
});
class SomeMiddleware {
public function handle($request)
{
\View::share('user', auth()->user());
}
}
4. Utilisation de View Composer
View Composer permet également de lier des données spécifiques à afficher de différentes manières. Vous pouvez directement lier une variable à une vue spécifique ou à toutes les vues. Par exemple, vous pouvez créer votre propre répertoire pour stocker votre fichier de composition de vues en fonction des besoins. et ces fichiers de composition de vues via le service fournissent une interaction avec la vue.
La méthode de composition de vue peut utiliser une manière différente, le premier exemple peut se ressembler:
Vous pouvez créer un App\Http\ViewComposers
répertoire.
Fournisseur de services
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
}
}
Après cela, ajoutez ce fournisseur à config / app.php dans la section «fournisseurs».
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}}
Cette méthode pourrait aider uniquement pour une vue spécifique. Mais si vous souhaitez déclencher ViewComposer sur toutes les vues, nous devons appliquer cette seule modification à ServiceProvider.
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer('*',"App\Http\ViewComposers\TestViewComposer");
}
}
Référence
Documentation Laravel
Pour plus de précisions sur l'épisode Laracast
Si quelque chose n'est toujours pas clair de mon côté, faites-le moi savoir.