よろしくお願いいたします。
[PC]: MacOS 10.15.4
現在はpaizaを参考にLaravelテストを行なっておりますが、ご質問させてください。
Laravel
にて、formタグをlaravelファサードで使用する際に、Form::model
とForm::open
という形式で記述しますが、いまいち違いがわかりません。
特に、Form::model
に関して理解できておりません。
例として以下に2つほど事例を記載します。
Form::modelでの記述例
php
1 {{ Form::model($company, ['route'=> ['company.update',$company->id]]) }} 2 <div class="form-group"> 3 {{ Form::label('name','会社名:') }} 4 {{ Form::text('name',null) }} 5 </div> 6 <div class="form-group"> 7 {{ Form::label('address','住所:') }} 8 {{ Form::text('address',null) }} 9 </div> 10 <div class="form-group"> 11 {{ Form::label('category_id','カテゴリ:') }} 12 {{ Form::select('category_id',$categories) }} 13 </div> 14 <div class="form-group"> 15 {{ Form::submit('更新',['class' => 'btn btn-outline-primary']) }} 16 </div> 17 {{ Form::close() }}
Form::openでの記述例
php
1 {{ Form::open(['method'=>'delete','route'=>['company.destroy',$company->id]]) }} 2 {{ Form::submit('削除',['class'=>'btn btn-outline-danger']) }} 3 {{ Form::close() }}
※二つの性質の違いが質問内容ですので、ルーティングやコントローラーの全文記述はしておりません。
$company
変数にはopen,model
どちらのパターンもCompany::find($id);
にて作成したDBにおけるid
に伴ったCompanyテーブル
1行分のデータを格納しております。
二つの違いはメソッドにて定義した変数があるかないかだけですが、
Form::open
に関してはhtml
のformタグ
でのmethod
とaction
が記述され、$comapany
のid
がルーティングを通して次のメソッドへ渡されているだけなので、理解しやすいのですが、
Form::model
の場合は第一引数に$company
が入っています。これが何のために記述されているのか不明です。やっていることはForm::open
での場合と同じくルーティングを通してテーブル各行のデータに伴うidを渡しているだけなのですが....
デベロッパーで確認するとForm::model
は以下
html
1<form method="POST" action="http://localhost:8000/company/update/1" accept-charset="UTF-8"></form>
でしたので、とりわけ変わったところがなかったのですが....
唯一記述に違いがあるとしたらmethod
を指定していない点くらいですが、同じように新規作成ページにおいて使用したForm::open
ではmethod
指定なくmethod=post
になっていたので、特に無関係そうなのですがどういった違いがあるのか理解できておりません。
Laravelを使用している方など、Form::model
とForm::open
の違いご存知の方がいらっしゃいましたらご教授いただけますと幸いです。
※ファサードに引数入力されているルーティング(Route::getの末尾"->name('xxxx(任意名)')")
を使用しておりますが、不必要だと考え、company.update
とcompany.destroy
のメソッド詳細は割愛しております。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/07/25 08:12