Tengo los elementos del menu guardados en la base de datos y quiero que se muestren en una barra lateral que esta disponible en cualquier parte del sistema, ¿como hago para cargar ese menu y que este disponible en todo momento sin tener que llamarlo en cada controlador?.
class MenuService
{
public function getMenu()
{
if ($menu = $this->getMenuFromCache()) {
return $menu;
}
$menu = $this->getMenuFromDatabase();
$this->saveMenuToCache($menu);
return $menu;
}
}
Uso roles para cada modulo/controlador del sistema por lo que si no tiene permisos para ese modulo no le muestro el elemento en el menú.
public function getMenuForUser(User $user)
{
$menu = $this->getMenu();
foreach ($menu as $key => $menuItem) {
if (!$this->hasPermission($user, $menuItem)) {
unset($menu[$key]);
}
}
return $menu;
}