<?php
use App\Http\Controllers\BannerController;
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::group(['middleware' => ['get.menu']], function () {
Route::get('/', function () {
return view('dashboard.homepage');
});
});
<?php
namespace App\Http\Middleware;
use Closure;
use App\Http\Menus\GetSidebarMenu;
use App\Models\Menulist;
use Illuminate\Http\Request;
class GetMenu
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
$role = 'guest';
$menus = new GetSidebarMenu();
$menulists = Menulist::all();
$result = array();
foreach ($menulists as $menulist) {
$result[$menulist->name] = $menus->get($role, $menulist->id);
}
view()->share('appMenus', $result);
return $next($request);
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Menulist extends Model
{
use HasFactory;
protected $table = 'menulist';
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Menus extends Model
{
use HasFactory;
protected $table = 'menus';
}
<?php
/*
* 07.11.2019
* GuestMenu.php
*/
namespace App\Http\Menus;
use App\MenuBuilder;
interface MenuInterface
{
public function get(string $roles);
}
<?php
/*
* 07.11.2019
* MenusMenu.php
*/
namespace App\Http\Menus;
use App\MenuBuilder\MenuBuilder;
use Illuminate\Support\Facades\DB;
use App\Models\Menus;
use App\MenuBuilder\RenderFromDatabaseData;
class GetSidebarMenu implements MenuInterface
{
private $mb; //menu builder
private $menu;
public function __construct()
{
$this->mb = new MenuBuilder();
}
private function getMenuFromDB($menuId, $menuName)
{
$this->menu = Menus::join('menu_role', 'menus.id', '=', 'menu_role.menus_id')
->select('menus.*')
->where('menus.menu_id', '=', $menuId)
->where('menu_role.role_name', '=', $menuName)
->orderBy('menus.sequence', 'asc')->get();
}
private function getGuestMenu($menuId)
{
$this->getMenuFromDB($menuId, 'guest');
}
private function getUserMenu($menuId)
{
$this->getMenuFromDB($menuId, 'user');
}
private function getAdminMenu($menuId)
{
$this->getMenuFromDB($menuId, 'admin');
}
public function get($role, $menuId = 2)
{
$this->getMenuFromDB($menuId, $role);
$rfd = new RenderFromDatabaseData;
return $rfd->render($this->menu);
}
public function getAll($menuId = 2)
{
$this->menu = Menus::select('menus.*')
->where('menus.menu_id', '=', $menuId)
->orderBy('menus.sequence', 'asc')->get();
$rfd = new RenderFromDatabaseData;
return $rfd->render($this->menu);
}
}