Salut à tous,
Alors voici mon problème (je suis sur Laravel 5.2) : J'ai créé un ViewComposer 'MenuComposer' chargé de construire mon menu dynamiquement depuis la BDD (certaines infos ne sont pas persistantes, d'où cette solution).
Voici le code du MenuComposer (je le met au cas où) :
public function compose(View $view)
{
$categories = Category::all();
$videos = Post::lastPublished(3, true)->get();
$menu = [
'posts' => [],
'videos' => []
];
// Menu posts
foreach ($categories as $category) {
if (is_null($category->parent_id)) {
$menu['posts'][$category->id] = [
'name' => $category->name,
'slug' => $category->slug,
'items' => []
];
} else {
$menu['posts'][$category->parent_id]['items'][$category->id] = [
'name' => $category->name,
'slug' => $category->slug
];
}
}
// Menu videos
foreach ($videos as $video) {
$menu['videos'][] = [
'id' => $video->id,
'name' => $video->name,
'slug' => $video->slug,
'url' => $video->video_url
];
}
$menu = collect($menu);
$view->with('menu', $menu);
}
Je le déclare donc dans la fonction boot du ComposerServiceProvider, avec le wildcard '*' pour que celui-ci soit appelé pour toutes les vues :
public function boot()
{
view()->composer(
'*', 'App\Http\ViewComposers\MenuComposer'
);
}
Le problème est qu'un ViewComposer ayant le wildcard '*' est appelé pour TOUTES de les vues, c'est-à-dire que peu importe la page sur laquelle je me reds, il sera appelé autant de fois que le site a de page (c'est apparemment son fonctionnement natif).
Si par exemple j'ai 6 pages dans les templates, il sera appelé 6x.
Du coup on se retrouve avec X fois les mêmes queries SQL, ce qui n'est pas vraiment opti pour les perfs.
J'aimerais savoir si quelqu'un a déjà rencontré le souci et s'il aurait une solution à me proposer ?
Merci.