make:form-field — フォームフィールドを生成するコマンド
artisan
- 概要:Laravel アプリケーションにフォームフィールドクラス(例:
TextField、SelectField)を自動生成します。
- カテゴリ:artisan
- 掲載バージョン:Laravel 12 / PHP 8.4
- FQCN / コマンド:
php artisan make:form-field
- 関連:
make:model, make:request, make:component, make:controller, make:middleware
- 変更履歴:Laravel 12 で追加、非推奨・後継はなし
TL;DR
- 何に使うか:フォームフィールドクラスを自動生成。
- 最低限の使い方
php artisan make:form-field TextField
- よくある罠
--force で上書きすると既存ファイルが失われる
- ディレクトリが無いと生成失敗
- スタブ更新忘れで機能しない
概要
make:form-field は app/Forms/Fields ディレクトリにパラメータ化されたフォームフィールドクラスを作成します。
スタブは stubs/form-field.stub から読み込まれ、クラス名・命名空間・ベースクラスが自動で埋め込まれます。
生成されたクラスは FormField を継承し、render() や rules() などをオーバーライドして使用します。
構文 / シグネチャ
php artisan make:form-field {name}
| 引数 | 型 | 必須 | 既定値 | 説明 |
|---|
{name} | string | ✔︎ | なし | 生成するフィールドクラス名(例: TextField) |
--type | string | ❌ | text | フィールドのタイプ(text, select, checkbox 等) |
--path | string | ❌ | app/Forms/Fields | 生成先パス(相対または絶対) |
--force | bool | ❌ | false | 同名ファイルが存在する場合上書きする |
戻り値
| 成功時 | 例外 |
|---|
ファイルパス(例: app/Forms/Fields/TextField.php) | FileAlreadyExistsException
PermissionDeniedException |
例
最小例
php artisan make:form-field TextField
生成されるファイル:
<?php
namespace App\Forms\Fields;
use App\Forms\Fields\FormField;
class TextField extends FormField
{
// ...
}
実務例
php artisan make:form-field SelectField --type=select --path=app/Forms/Fields/Inputs
生成されるファイル:
<?php
namespace App\Forms\Fields\Inputs;
use App\Forms\Fields\FormField;
class SelectField extends FormField
{
public function options(array $options): self
{
$this->attributes['options'] = $options;
return $this;
}
}
コントローラでの使用例
public function store(Request $request)
{
$form = new \App\Forms\Fields\Inputs\SelectField('category_id')
->options(Category::pluck('name', 'id'))
->required();
$validated = $request->validate($form->rules());
// ...
}
よくある落とし穴
| 典型的な症状 | 原因 | 対処 |
|---|
FileAlreadyExistsException | 同名ファイルが存在 | --force を付与するか別名に変更 |
| フォルダがない | --path が指すディレクトリが存在しない | mkdir -p で作成するか --path を削除 |
| 生成されたクラスが名前空間を解決できない | composer dump-autoload を実行していない | コマンド実行後に composer dump-autoload を実行 |
render() が呼ばれない | クラスに実装が不足 | スタブを確認し必要メソッドを実装 |
代替・関連APIとの比較
| 代替手段 | 特徴 | 選定基準 |
|---|
| 手動作成 | コントローラで直接クラスを書く | 小規模プロジェクト・単一フィールド |
make:field (外部パッケージ) | カスタムフィールド生成 | 既存パッケージ統合が必要 |
make:form-field (本コマンド) | 標準化されたファイル構成 | コードベースの一貫性を重視 |
Pest テスト例
it('generates a form field class', function () {
$name = 'TestField';
Artisan::call('make:form-field', ['name' => $name]);
$path = app_path("Forms/Fields/{$name}.php");
expect(file_exists($path))->toBeTrue();
$content = file_get_contents($path);
expect($content)->toContain("class {$name} extends FormField");
});
トラブルシュート(エラー別)
| エラー | 原因 | 対処 |
|---|
Unable to create file | ファイル権限不足 | ディレクトリ/ファイルの書き込み権限を確認 |
Class App\Forms\Fields\TextField does not exist | Composer autoload が更新されていない | composer dump-autoload を実行 |
Argument 1 passed to make:form-field must be a string | 名前を渡していない | name 引数を必ず付与 |
参考リンク