multi authで管理者ログインを作成して、dashboard.phpをadminフォルダーに複製して使うと見た目はjetstreamできれいに収まる。
しかし、そのままだとリンクもそのままなので、すぐにフロント側にもどってしまう。
\app\View\Components
dashboardを見てみると、<x-app-layout>で囲まれている。xケバブ。
xケバブは、\app\View\Componentsに登録されているという意味らしい。なるほど、そこにAppLayout.phpという、それらしいのがある。
<?php
namespace App\View\Components;
use Illuminate\View\Component;
class AppLayout extends Component
{
/**
* Get the view / contents that represents the component.
*
* @return \Illuminate\View\View
*/
public function render()
{
return view('layouts.app');
}
}
要するに、views/layoutsのapp.blade.phpが対象になる。
これを改変するのでもよいかもしれないが、adminapp.blade.phpとして複製する。
dashboard.phpは<x-adminapp-layout>で囲むことになる。
しかしながら、xケバブは、\app\View\Componentsに登録されている必要があるので、AppLayout.phpをAdminappLayout.phpとして複製する。
これは、\app\View\Componentsフォルダーにあるというだけで、xケバブは有効になる。
<?php
namespace App\View\Components;
use Illuminate\View\Component;
class AdminappLayout extends Component
{
/**
* Get the view / contents that represents the component.
*
* @return \Illuminate\View\View
*/
public function render()
{
return view('layouts.adminapp');
}
}
JetstreamServiceProvider
adminapp.blade.phpで、上部のナビゲーションバーに当たるものは、
@livewire('navigation-menu')
で指定されている。
livewireコンポーネント。これも単に複製するだけでは動作しない。
これらのコンポーネントは、\vendor\laravel\jetstream\src\JetstreamServiceProviderに登録されている。
抜粋
-----
use Laravel\Jetstream\Http\Livewire\NavigationMenu;
use Laravel\Jetstream\Http\Livewire\NavigationadminMenu;
-----
public function register()
{
$this->mergeConfigFrom(__DIR__.'/../config/jetstream.php', 'jetstream');
$this->app->afterResolving(BladeCompiler::class, function () {
if (config('jetstream.stack') === 'livewire' && class_exists(Livewire::class)) {
Livewire::component('navigation-menu', NavigationMenu::class);
Livewire::component('navigationadmin-menu', NavigationadminMenu::class);
Livewire::component('profile.update-profile-information-form', UpdateProfileInformationForm::class);
Livewire::component('profile.update-password-form', UpdatePasswordForm::class);
Livewire::component('profile.two-factor-authentication-form', TwoFactorAuthenticationForm::class);
Livewire::component('profile.logout-other-browser-sessions-form', LogoutOtherBrowserSessionsForm::class);
Livewire::component('profile.delete-user-form', DeleteUserForm::class);
if (Features::hasApiFeatures()) {
Livewire::component('api.api-token-manager', ApiTokenManager::class);
}
if (Features::hasTeamFeatures()) {
Livewire::component('teams.create-team-form', CreateTeamForm::class);
Livewire::component('teams.update-team-name-form', UpdateTeamNameForm::class);
Livewire::component('teams.team-member-manager', TeamMemberManager::class);
Livewire::component('teams.delete-team-form', DeleteTeamForm::class);
}
}
});
}
<x-jet ケバブ
protected function configureComponents()
{
$this->callAfterResolving(BladeCompiler::class, function () {
$this->registerComponent('action-message');
$this->registerComponent('action-section');
$this->registerComponent('application-logo');
$this->registerComponent('application-mark');
$this->registerComponent('authentication-card');
$this->registerComponent('authentication-card-logo');
$this->registerComponent('banner');
$this->registerComponent('button');
$this->registerComponent('confirmation-modal');
$this->registerComponent('confirms-password');
$this->registerComponent('danger-button');
$this->registerComponent('dialog-modal');
$this->registerComponent('dropdown');
$this->registerComponent('dropdown-link');
$this->registerComponent('form-section');
$this->registerComponent('input');
$this->registerComponent('checkbox');
$this->registerComponent('input-error');
$this->registerComponent('label');
$this->registerComponent('modal');
$this->registerComponent('nav-link');
$this->registerComponent('responsive-nav-link');
$this->registerComponent('responsive-switchable-team');
$this->registerComponent('secondary-button');
$this->registerComponent('section-border');
$this->registerComponent('section-title');
$this->registerComponent('switchable-team');
$this->registerComponent('validation-errors');
$this->registerComponent('welcome');
});
}
Laravel\Jetstream\Http\Livewire\NavigationadminMenu.phpを作り、JetstreamServiceProviderに追加する。
\vendor\laravel\jetstream\src\Http\Livewire\NavigationadminMenu.php
<?php
namespace Laravel\Jetstream\Http\Livewire;
use Livewire\Component;
class NavigationadminMenu extends Component
{
/**
* The component's listeners.
*
* @var array
*/
protected $listeners = [
'refresh-navigation-menu' => '$refresh',
];
/**
* Render the component.
*
* @return \Illuminate\View\View
*/
public function render()
{
return view('navigationadmin-menu');
}
}
navigation-menuからnavigationadmin-menuを複製する。
これで、adminapp.blade.phpの
@livewire('navigation-menu') を@livewire('navigationadmin-menu')に変更しても動作する。
カスタマイズが可能となりそう。