{{-- 아이템 권한 체크 --}} @if (!empty($item['roles']) && !$User->hasRole($item['roles'])) @php return; @endphp @endif @if (isset($item['exclude_roles']) && $User->hasRole($item['exclude_roles'])) @php return; @endphp @endif @php $service = $item['service'] ?? null; $isServices = !empty($item['services']); $isSeparate = isset($isSeparate) ? $isSeparate : false; $cols = $isServices ? count($item['services']) : 1; if ( $isServices ) { $services =array_filter($item['services'], function($service) use ($isSeparate, $roleServices) { return ! $isSeparate || ( $isSeparate && in_array($service, $roleServices ) ); }); $cols = sizeof($services); } @endphp
  • $isServices, 'with-btn' => !$isServices && !empty($item['with_btn'])]) style="--cols: {{ $cols }}"> @if ($isServices) @foreach ($item['services'] as $key => $service) @php if ( $isSeparate && ! in_array($service, $roleServices )) { continue; } // 'active' 상태를 결정하는 로직 $isActive = false; if (isset($item['condition'])) { // 커스텀 조건 문자열을 평가 (주의: 신뢰할 수 있는 코드만 사용) switch ($item['condition']) { case "not-static-and-not-hidden": $isActive = request()->routeIs('inquiry.list') && request()->get('is_hidden') != 1 && request()->service === $service; break; case "is-inquiry-list-and-hidden": $isActive = request()->routeIs('inquiry.list') && request()->get('is_hidden') == 1 && request()->service === $service; break; } } else { $routeCheck = $item['route']; $patterns = [$routeCheck]; // 정확히 일치하는 것도 우선 넣음 // 만약 점으로 끝나지 않는다면 와일드카드도 추가 if (!str_ends_with($routeCheck, '.list')) { $patterns[] = $routeCheck . '.*'; } $isActive = request()->routeIs(...$patterns); // 2) 서비스 코드 일치 if (!isset($item['segment'])) { $isActive = $isActive && request()->input('service', '') === $service; } else { $isActive = $isActive && request()->segment($item['segment']) == $service; } // 3) schedule.* 라우트라면 type 파라미터까지 확인 if (str_starts_with($item['route'], 'schedule.') && isset($item['params']['type'])) { $typeInUrl = request()->segment(count(request()->segments())); // 마지막 segment $isActive = $isActive && $typeInUrl === $item['params']['type']; } } $routeParams = ['service' => $service]; if (!empty($item['params'])) { $routeParams = array_merge($routeParams, $item['params']); } @endphp
    !empty($item['with_btn'])])> @if (!empty($item['route'])) $isActive]) href="{{ route($item['route'], $routeParams) }}"> {{ is_array($item['title']) ? $item['title'][$key] : $item['title'] }} @else $isActive]) href=""> {{ is_array($item['title']) ? $item['title'][$key] : $item['title'] }} @endif @if (!empty($item['with_btn'])) @php $addBtn = $item['add_btn'] ?? []; $addRoute = $item['add_route'] ?? null; @endphp @if(empty($addBtn['roles']) || $User->hasRole($addBtn['roles'])) @if(isset($addBtn['type']) && $addBtn['type'] === 'javascript') @else @if(!is_null($addRoute)) @endif @endif @endif @endif
    @endforeach @else {{-- 단일 링크 아이템 --}} @php $routeParams = $item['params'] ?? []; $isActive = request()->routeIs($item['route'] . '*'); if (str_starts_with($item['route'], 'board.post-list') && isset($item['params']['prefix'])) { $typeInUrl = request()->segment($item['segment']); // 마지막 segment $prefixInUrl = request()->segment(4); // 마지막 segment $isActive = $isActive && $typeInUrl === $item['params']['service'] && $prefixInUrl === $item['params']['prefix']; } @endphp $isActive]) href="{{ route($item['route'], $routeParams) }}">{{ $item['title'] }} @if (!empty($item['with_btn']) && !empty($item['add_btn'])) @if(empty($item['add_btn']['roles']) || $User->hasRole($item['add_btn']['roles'])) @endif @endif @endif