Filament phpを使ってみる
初めに
管理画面を作成するのに、早く正確に作る方法を考えると、
少なくとも、nuxetやらnextやらは違うので、
ちゃっちゃっとできるlaravel-admin的な物を探していました。
んで、見つけたのがfilament
何がいけてるかというと、
data-tableがチャチャっと作れる所。
とりあえずやってみようwww
laravel10のインストール
チャチャっと行きたいので、sailで行きます。
今回はfilament
とした。
curl -s https://laravel.build/filament | bash
/filament
の部分がフォルダ名になる。
特に
かなり時間がかかるけど、laravel sailがインストールされる
終わったら、
cd filament
./vendor/bin/sail up
でsailを起動してlaravel10が上手く起動するか確認する。
ブラウザでlocalhostにアクセスしてlaravelが開くか確認する
開いたので、一回sailをダウンする
./vendor/bin/sail down
filamentをインストールする
filamentフォルダ内で
./vendor/bin/sail up -d
でバックグラウンドでsailを立ち上げた状態で
./vendor/bin/sail composer require filament/filament:"^3.0-stable" -W
完了すると
./vendor/bin/sail artisan filament:install --panels
実行すると。
たぶん一人目のIDかな?
「admin」のままで行く事にしたのでそのまま何もせずにキーボードのenterを押した
そうすると、うちゃ~っと何かが動いたのて、
なんか聞かれる。
google翻訳すると「すべて完了! GitHub の Filament リポジトリにスターを付けて愛を示してみませんか?」との事なので、
今回はしない事として「No」を選んでenter
完了したみたい
この状態で
にアクセスするとこんな感じで
filamentログイン画面が表示される
最初のユーザーを作成する
マイグレーションをしてないので、先にマイグレーションする
./vendor/bin/sail artisan migrate
filamentユーザー作成でユーザーを作成する
./vendor/bin/sail artisan make:filament-user
こんな感じでコマンドライン上で聞かれるから入力したらユーザーが作成される
ログイン用の情報
種類 | 内容 |
---|---|
admin@admin.com | |
password | pass |
作成したユーザー情報でアクセスする
ログインできた!
とりあえず、チュートリをして、全体像をつかむ
公式ではここhttps://filamentphp.com/docs/3.x/panels/getting-startedね
モデルとマイグレーションファイルを作る。
./vendor/bin/sail artisan make:model Owner -m
./vendor/bin/sail artisan make:model Patient -m
./vendor/bin/sail artisan make:model Treatment -m
上から、飼い主、患者(のペット)、診察記録
こうすると、database/migrations/
の中にマイグレーションファイルができるので、テーブル構造を書いていく
テーブルを作成するためのマイグレーションファイルを書く
飼い主(owners)テーブルの内容
database\migrations<datetimestring>_create_owners_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('owners', function (Blueprint $table) {
$table->id();
$table->string('email');
$table->string('name');
$table->string('phone');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('owners');
}
};
同じように他のモデル(テーブル)のマイグレーションファイルも書いていく
患者(patients)テーブル
Schema::create('patients', function (Blueprint $table) {
$table->id();
$table->date('date_of_birth');
$table->string('name');
$table->foreignId('owner_id')->constrained('owners')->cascadeOnDelete();
$table->string('type');
$table->timestamps();
});
診察履歴(treatments)テーブル
Schema::create('treatments', function (Blueprint $table) {
$table->id();
$table->string('description');
$table->text('notes')->nullable();
$table->foreignId('patient_id')->constrained('patients')->cascadeOnDelete();
$table->unsignedInteger('price')->nullable();
$table->timestamps();
});
マイグレーションファイルを書いたので、コマンドを叩いてテーブルを作成する
./vendor/bin/sail artisan migrate
出来た
Eloquentの保護機能を解除する
普通はやっちゃだめだよwww
今回は簡単に話しを進める為にとりあえず解除する。らしい・・・
app/Providers/AppServiceProvider.phpをこんな風に変える
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Database\Eloquent\Model; //追加
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Model::unguard(); //追加
}
}
一旦これで、テーブルとモデルができた。
リレーションを作る
飼い主は複数の患者のペットを飼ってる事が有るから、
1:多=飼い主:患者のペット
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany; //追加
class Owner extends Model
{
use HasFactory;
public function patients(): HasMany //この関数をマルっと追加
{
return $this->hasMany(Patient::class);
}
}
患者のペットは飼い主の逆で、なおかつ患者には複数の診察履歴が有るから、
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo; //追加
use Illuminate\Database\Eloquent\Relations\HasMany; //追加
class Patient extends Model
{
use HasFactory;
public function owner(): BelongsTo //この関数をマルっと追加
{
return $this->belongsTo(Owner::class);
}
public function treatments(): HasMany //この関数をマルっと追加
{
return $this->hasMany(Treatment::class);
}
}
診察履歴は患者の逆だから
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo; //追加
class Treatment extends Model
{
use HasFactory;
public function patient(): BelongsTo //この関数をマルっと追加
{
return $this->belongsTo(Patient::class);
}
}
患者画面の作成
./vendor/bin/sail artisan make:filament-resource Patient
実行すると、app/Filament/Resources/
の中にPatientResource
というフォルダができる
中身はこんな感じ
+-- PatientResource.php
+-- PatientResource
| +-- Pages
| | +-- CreatePatient.php
| | +-- EditPatient.php
| | +-- ListPatients.php
この状態でhttp://localhost/adminにアクセスすると
下の図のように、サイドバーに「Patients」が追加される。
せっかくなのでサイドバーの「Patients」を日本語化する
namespace App\Filament\Resources;
use App\Filament\Resources\PatientResource\Pages;
//...省略
use Illuminate\Database\Eloquent\SoftDeletingScope;
class PatientResource extends Resource
{
protected static ?string $navigationLabel = '患者';//追加
protected static ?string $model = Patient::class;
//...以下省略
日本語になった