💭
PHP, ReflectionClass でクラス名からインスタンスを生成する
やりたかったこと
Laravel Artisan PromptでModel名指定した際にそのままEloquentModelを利用したかった
new ReflectionClass()
$model_name = '\\App\\Models\\User';
$refrection = new ReflectionClass($model_name);
$eloquent_model = $refrection->newInstance();
dd($eloquent_model->all());
$model_name
にモデル名を入れておけば、定義しなくてもEloquentModelが扱える
Laravel Prompt応用
// モデルファイルリストの取得
$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を利用出来るようになった。
Discussion