💭

PHP, ReflectionClass でクラス名からインスタンスを生成する

2024/05/10に公開

やりたかったこと

Laravel Artisan PromptでModel名指定した際にそのままEloquentModelを利用したかった

new ReflectionClass()

https://www.php.net/manual/ja/class.reflectionclass.php

$model_name = '\\App\\Models\\User';
$refrection = new ReflectionClass($model_name);
$eloquent_model = $refrection->newInstance();

dd($eloquent_model->all());

$model_name にモデル名を入れておけば、定義しなくてもEloquentModelが扱える

Laravel Prompt応用

https://laravel.com/docs/11.x/prompts

// モデルファイルリストの取得
$model_files = collect(scandir(app_path('Models')))->filter(function (string $value, int $key) {
    return $value !== '.' && $value !== '..';
})->values()->toArray();

// Laravel Prompt でモデル選択
$select_model = select(label: 'Modelを選択', options: $model_files, hint: '');

// Eloquent Model Instance作成
$refrection = new ReflectionClass($select_model);
$eloquent_model = $refrection->newInstance();

// Modelの利用
dd($eloquent_model);

これでPropmtで選択したModelを利用出来るようになった。

GitHubで編集を提案

Discussion