WinRoadのLaravel4初心者講座

次世代PHPフレームワークのLaravel4を初心者向けに解説して参ります。

Winroad徒然草の管理人がお届けします
Formとモデルの結合

Formとモデルの結合

このエントリーをはてなブックマークに追加

Form::openの代わりに、Form::modelメソッドを使うと、Formの要素にモデルのプロパティ(テーブルのフィールド)を紐付けることが出来るようになります。

Form::modelメソッドの第1引数には、モデルのオブジェクト、第2引数には、オプションでパラメーターを配列で指定します。

(例)それでは、実例を挙げてみましょう。

  1. コントローラから下記のようにデータをビューファイルに引き渡します。
  2. <?php
     class UserController extends BaseController{
     public function getUpdate($id){
     $user=user::find($id);
     return View::make('user.update',compact('user'));
     }
     }
  3. そして、ビューファイル(app/views/user/update.blade.php)のフォームとモデルを結合します。
  4. @extends('layout')
     @section('content')
     {{Form::model($user)}}
     {{Form::text('username')}}
     {{Form::text('email')}}
     {{Form::hidden('id')}}
     {{Form::submit('更新')}}
     {{Form::close()}}
     @stop
  5. Form::modelでフォームとモデルを結合すると、Form::textの第2引数に、デフォルト値を指定しなくても、フォームのフィールドに、$user->usernameや$user->emailの値を表示します。つまり、上記は、下記と同じになります。
  6. @extends('layout')
     @section('content')
     {{Form::open()}}
     {{Form::text('username',$user->username)}}
     {{Form::text('email,$user->email)}}
     {{Form::hidden('id',$user->id)}}
     {{From::submit('更新')}}
     {{Form::close()}}
  7. Form::modelメソッドの便利なところは、これだけでは、ありません。セッションのフラッシュデータがある場合(バリデーションエラーで元のページへ戻された場合)には、デフォルト値が、直前の入力値(フラッシュデータ)に置き換わります。
  8. public function postUpdate(){
     $inputs=Input::except('_token');
     $rules=['username'=>'require','email'=>'require|emai'];
     $val=Validator::make($inputs,$rules);
     if($val->fails()){
     return Redirect::back()->withInput();
     }
     }
  9. つまり、上記のような場合は、フォームのデフォルト値は、直前値に変わります。ですので、実際に、Form::modelメソッドをForm::openメソッドで記述すると、下記のようになります。
  10. @extends('layout')
     @section('content')
     {{Form::open()}}
     {{Form::text('name',Session::get('username',$user->username))}}
     {{Form::text('email',Session::get('email',$user->email))}}
     {{Form::hidden('id',$user->id)}}
     {{Form::submit('更新')}}
     {{Form::close()}}
     @stop

尚、Form::modelメソッドで、フォームを開始した場合、かならずForm::closeメソッドで終了するようにしてください。

« »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です