config('admin.route') . '/main', 'middleware' => ['web', 'admin.area', 'admin.menu'], 'as' => config('admin.route_name_prefix')], function(){ //Config的Menu組態設定 $menuItems = config('admin.menuItems'); //Menu Route Name的前綴 $menuRouteNamePrefix = config('admin.menu.route_name_prefix'); //MenuItemContoller的Route處理函式 $menuItemControllerHandlingMethod = 'handle'; /** * MenuItem的處理物件,為全域Singleton物件 * @var \App\Services\Admin\MainMenuItemService $adminMenu */ $adminMenu = app('AdminMenu'); foreach ($menuItems as $menuItem) { if($menuItem['type'] == 'item') { if(class_exists($menuItem['controller'])) { /** * @var \App\Http\Controllers\Admin\Menu\BaseMenuItemController $parentItem */ $parentItem = new $menuItem['controller']; if(!$parentItem->isValid()) { continue; } $hasChildren = !empty($menuItem['children']); $routeName = false; $link = '#'; if(!$hasChildren) { $routeName = "{$menuRouteNamePrefix}{$parentItem->getSlug()}"; $action = "{$menuItem['controller']}@$menuItemControllerHandlingMethod"; //註冊Route Route::get($parentItem->getSlug(), $action)->name($routeName); } //註冊選單項目 $adminMenu->addItem([ 'type' => 'item', 'parentSlug' => false, 'routeName' => $routeName, ], $parentItem); if($hasChildren) { foreach((array)$menuItem['children'] as $childMenuItem) { if(class_exists($childMenuItem)) { /** * @var \App\Http\Controllers\Admin\Menu\BaseMenuItemController $childItem */ $childItem = new $childMenuItem; if(!$childItem->isValid()) { continue; } $routeName = "{$menuRouteNamePrefix}{$parentItem->getSlug()}.{$childItem->getSlug()}"; $action = "$childMenuItem@$menuItemControllerHandlingMethod"; //註冊Route Route::get("{$parentItem->getSlug()}/{$childItem->getSlug()}", $action)->name($routeName); //註冊選單項目 $adminMenu->addItem([ 'type' => 'item', 'parentSlug' => $parentItem->getSlug(), 'routeName' => $routeName, ], $childItem); } } } } } elseif($menuItem['type'] == 'title') { $adminMenu->addItem([ 'type' => 'title', 'name' => $menuItem['name'] ]); } elseif($menuItem['type'] == 'divider') { $adminMenu->addItem([ 'type' => 'divider', ]); } } }); } }