📘
Laravel Filamentで請求システム作る No7 画面で権限を操作
前回に引き続きFilamentで請求システムを作っていきます
前回はbasePolicy.php
でpolicyを簡単に扱えるようにしたので、
今回は画面を作っていきます。
ユーザー詳細画面に「UserHasPolicy」テーブルのレコードを追加・変更できる機能を追加します。
公式ドキュメントを読むと
filamentではリレーションマネージャーを定義すると、行けるみたい
今回は「User」モデルと「UserHasPolicy」モデルはHasMany
の関係なので、
リピーターという概念らしい
とは言えリレーションマネージャーを作成するのは同じ模様
コマンドはこんな感じらしい
php artisan make:filament-relation-manager <親リソースクラス> <子モデルの関係> <子モデルのレコード識別カラム>
リレーションマネージャーを作る
今回は、
./vendor/bin/sail artisan make:filament-relation-manager UserResource userHasPolicy model_name
になるのかな?
app/Filament/Resources/UserResource/RelationManagers/UserHasPolicyRelationManager.php
ができたっぽい。
出来たphpの中身を確認する
app/Filament/Resources/UserResource/RelationManagers/UserHasPolicyRelationManager.php
<?php
namespace App\Filament\Resources\UserResource\RelationManagers;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
class UserHasPolicyRelationManager extends RelationManager
{
protected static string $relationship = 'userHasPolicy';
public function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('model_name')
->required()
->maxLength(255),
]);
}
public function table(Table $table): Table
{
return $table
->recordTitleAttribute('model_name')
->columns([
Tables\Columns\TextColumn::make('model_name'),
])
->filters([
//
])
->headerActions([
Tables\Actions\CreateAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
}
ちょっと現状では、model_name
だけしか表示されてないので、もうちょっと手直しはしたいな。
一応画面を見てみる
ユーザーの詳細画面を見てみるも、何も表示されてねぇ~www
UserResourceの編集
app\Filament\Resources\UserResource.php
の'getRelations()'にリレーションの情報を追加せよとなってます。
app\Filament\Resources\UserResource.php
public static function getRelations(): array
{
return [
- //
+ RelationManagers\UserHasPolicyRelationManager::class,
];
}
これで画面を見ると追加されました。
table定義をする
とは言え、見た目的にどうなのって話なので、調整する
タイトル部分とボタン
最初は全て、「UserHasPolicy」と表示されるので、
日本語に変更する
app\Filament\Resources\UserResource\RelationManagers\UserHasPolicyRelationManager.php
class UserHasPolicyRelationManager extends RelationManager
{
protected static ?string $modelLabel = '権限';
protected static ?string $title = '権限';
次回
今回は、Filamentのリレーションマネージャーでリレーション先のデータを表示する所までつくりました。
次回は、権限の一覧部分に対して機能を乗せていきます。
Discussion