手順
- ViewComposerを導入する
- 「adminlte::partials.sidebar.menu-item」で使用するviewcomposer「SidebarMenuItemComposer」を作成する
- $item['class']に「active」が追加されるようにする
- 「SidebarMenuItemComposer」を「adminlte::partials.sidebar.menu-item」に関連付ける
以下コード
/app/Http/ViewComposers/SidebarMenuItemComposer.php
<?php
namespace App\Http\ViewComposers\User\Worker;
use Auth;
use Illuminate\View\View;
/**
* Class ModalSearchCemeteryComposer
* @package App\Http\ViewComposers\User\Worker
*/
class SidebarMenuItemComposer
{
/**
* @param View $view
*/
public function compose(View $view)
{
// 現在のページに応じて左メニューをactiveにする
$path = request()->path();
$host = request()->getHttpHost();
$http = $this->isSsl() ? 'https' : 'http';
$item = $view->getData('item');
$pattern = str_replace($http.'://'.$host.'/', '', $item['item']['href']);
if (!$item['item']['active'] && ($pattern === $path || strpos($path, $pattern.'/') === 0)) {
$item['item']['class'] .= ' active ';
}
$view->with(['item' => $item['item']]);
}
//Webサーバー毎にキーと値で判別
private function isSsl()
{
if (isset($_SERVER['HTTPS']) === true ) // Apache
{
return ($_SERVER['HTTPS'] === 'on' or $_SERVER['HTTPS'] === '1' );
}
elseif (isset($_SERVER['SSL']) === true ) // IIS
{
return ($_SERVER['SSL'] === 'on' );
}
elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) === true ) // Reverse proxy
{
return (strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https' );
}
elseif (isset($_SERVER['HTTP_X_FORWARDED_PORT']) === true ) // Reverse proxy
{
return ($_SERVER['HTTP_X_FORWARDED_PORT'] === '443' );
}
elseif (isset($_SERVER['SERVER_PORT']) === true )
{
return ($_SERVER['SERVER_PORT'] === '443' );
}
return false;
}
}
/app/Providers/ViewComposerServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use View;
class ViewComposerServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
View::composers([
\App\Http\ViewComposers\User\Worker\SidebarMenuItemComposer::class => 'adminlte::partials.sidebar.menu-item',
]);
}
}