위치 : app/Http/ViewComposers/AdminMenuComposer.php
위의 위치에 맞게 ViewComposers폴더 및 AdminMenuComposer.php파일을 생성함.
<?php
namespace App\Http\ViewComposers;
use Illuminate\View\View;
class AdminMenuComposer
{
protected $menus;
protected $topMenus;
public function __construct()
{
// 메뉴 설정 {
$common = [
[
'title' => 'Dashboard',
'url' => route('rhksfl.home', null, false), // 반드시 이렇게 작성함.
],
];
$setting = [
[
'nav_title' => '사이트 관리',
'title' => '게시판 관리',
'url' => route('rhksfl.board-infos.index', null, false),
],
[
'title' => '메뉴 관리',
'url' => route('rhksfl.home', null, false),
],
];
// } 메뉴 설정
$this->topMenus = [
$setting[0],
];
$prefix = explode('/', request()->route()->getPrefix());
if (count($prefix) > 1) {
$prefix = $prefix[1];
$this->menus = $$prefix;
} else {
$this->menus = $common;
}
}
public function compose(View $view)
{
$view->with('adminTopMenus', $this->topMenus);
$view->with('adminMenus', $this->menus);
$nowPath = request()->server('REQUEST_URI');
$nowMenu = 0;
$nowPosition = '';
$topMenuTitle = 'Dashboard';
$nowMenuTitle = '';
if ($nowPath && !empty($this->menus)) {
foreach ($this->menus as $index => $menu) {
if (!empty($menu['nav_title'])) {
$topMenuTitle = $menu['nav_title'];
}
if (!empty($menu['sub'])) {
foreach ($menu['sub'] as $subIndex => $subMenu) {
if (preg_match('/^(' . str_replace('/', '\/', $subMenu['url']) . ')(\/|\?|$)/', $nowPath)) {
$nowMenu = $index;
$nowPosition = $subIndex;
$nowMenuTitle = $subMenu['title'];
break;
}
}
} else {
if (preg_match('/^(' . str_replace('/', '\/', $menu['url']) . ')(\/|\?|$)/', $nowPath)) {
$nowMenu = $index;
$nowMenuTitle = $menu['title'];
break;
}
}
}
}
$view->with('topMenuTitle', $topMenuTitle);
$view->with('nowMenuTitle', $nowMenuTitle);
$view->with('nowMenu', $nowMenu);
$view->with('nowPosition', $nowPosition);
}
}
- 'url' => route('rhksfl.home', null, false),
위와 같이 코드를 작성하면 아래의 사진과 같고
- 'url' => route('rhksfl.home'),
위와 같이 코드를 작성하면 아래의 사진과 같다.
이러한 상황이 발생하면 1번의 경우 뒤에 무언가 더 주소가 추가되더라고 같은 메뉴라고 확인이 된다.
하지만, 2번의 경우는 같은 메뉴라고 확인이 안됨.
<nav class="navbar navbar-light bg-white p-0">
<ul class="nav flex-column w-100">
@foreach($adminMenus as $index => $menu)
@if(!empty($menu['nav_title']))
<li class="nav-item bg-primary text-white px-2 py-3 font-weight-bold">
{{ $menu['nav_title'] }}
</li>
@endif
@if(!empty($menu['sub']))
<li class="nav-item border-bottom">
<p class="mb-0 px-2">{{ $menu['title'] }}</p>
<ul class="nav flex-column">
@foreach($menu['sub'] as $subIndex => $subMenu)
<li class="nav-item">
<a class="nav-link @if($nowMenu === $index && $nowPosition === $subIndex) active @endif "
href="{{ $subMenu['url'] }}">
{{ $subMenu['title'] }}
</a>
</li>
@endforeach
</ul>
</li>
@else
<li class="nav-item border-bottom">
<a class="nav-link @if($nowMenu === $index) active @endif " href="{{ $menu['url'] }}">
{{ $menu['title'] }}
</a>
</li>
@endif
@endforeach
</ul>
</nav>
php artisan make:provider ComposerServiceProvider
그러면, app/Providers/ComposerServiceProvider.php에 파일이 생성됨.
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
View::composer(
['admin.layouts.app'], 'App\Http\ViewComposers\AdminMenuComposer' // 이 부분 추가함.
);
}
}
위치 : config/app.php
"추가함"이라고 한 부분을 추가하면 프로바이더 등록 완료.