WinRoadのLaravel4初心者講座

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

Winroad徒然草の管理人がお届けします
EloquentORMでデータの修正

EloquentORMでデータの修正

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

「EloqunetORMでデータの詳細表示」のリンクから、データの修正ページへ移動してデータを修正したいと思います。

データ修正用ルーター

データ修正用のルーターを下記のように記述します。

app/routes.php
/******************************************
*
* データの修正
*
* getでデータ修正用ページの表示
* postでバリデーション及びデータの修正
*
******************************************/

Route::get('collection/update/{id}',function($id){
$data['collection']=Collection::find($id);
return View::make('collection/update',$data);
});

Route::post('collection/update/{id}',array('before'=>'csrf',function($id){
//POSTデータの受信
$inputs=Input::all();
//バリデーションルールの設定
$rules=array(
'code'=>'required|max:20',
'title'=>'required',
'category'=>'required',
);
//バリデーション処理
$val=Validator::make($inputs,$rules);
//バリデーションNGなら
if($val->fails()){
return Redirect::back()
->withErrors($val)
->withInput();
}
//バリデーションOKなら
$collection=Collection::find($id);
$collection->code=Input::get('code');
$collection->title=Input::get('title');
$collection->category=Input::get('category');
$collection->content=Input::get('content');
$collection->save();
return Redirect::to('collection/detail/'.$collection->id);
}));
  • 17行目:Input::allメソッドは、全受信データを受け取ります。今まで、Input::only(配列)でデータを指定して受信していましたが、今回はバリデーションのみに使用しますので、Input::allで全てのデータを受信しました。今まで通りInput::onlyメソッドでも構わないと思います。
  • 33行目:Model::findメソッドで、パラメータとして受け取ったIDでデータを検索しています。
  • 38行目:saveメソッドで、34-37行目で渡されたパラメーターを元にデータベースを修正します。
  • 39行目:修正した内容がすぐに分かるように詳細ページへ再度移動しています。

データ修正用ビュー

次にデータ修正用のビューを下記のように記述します。

app/views/collection/update.blade.php
@extends('layouts.hpb')
@section('content')
 <div id="hpb-wrapper">
 <div id="hpb-main">
 <h4 style="color:red">修正</h4>
{{ Form::open() }}
 <table border="1" width="95%" cellspacing="0" cellpadding="2" id="HPB_TABLE_1_B_130514141846" class="hpb-cnt-tb2">
 <tbody>
 <tr>
 <td class="hpb-cnt-tb-cell3" width="75">&nbsp;コード*</td>
 <td class="hpb-cnt-tb-cell4" width="435">&nbsp;
{{ Form::text('code',$collection->code) }}
@if($errors->has('code'))
<h4 style="color:red">{{ $errors->first('code') }}</h4>
@endif
 </td>
 </tr>
 <tr>
 <td class="hpb-cnt-tb-cell3" width="75">カテゴリ*</td>
 <td class="hpb-cnt-tb-cell4" width="435">&nbsp;
<select size="3" name="category">
 <option value="洋画" selected>洋画</option>
 <option value="邦画">邦画</option>
 <option value="TVドラマ">TVドラマ</option>
 </select></td>
 </tr>
 <tr>
 <td class="hpb-cnt-tb-cell3" width="75">&nbsp;タイトル*</td>
 <td class="hpb-cnt-tb-cell4" width="435">&nbsp;
{{ Form::text('title',$collection->title) }}
@if($errors->has('title'))
<h4 style="color:red">{{ $errors->first('title') }}</h4>
@endif
 </td>
 </tr>
 <tr>
 <td class="hpb-cnt-tb-cell3" width="75">コンテンツ&nbsp;</td>
 <td class="hpb-cnt-tb-cell4" width="435">&nbsp;
{{ Form::textarea('content',$collection->content) }}
 </td>
 </tr>
 <tr>
 <td class="hpb-cnt-tb-cell3">&nbsp;</td>
 <td class="hpb-cnt-tb-cell4">&nbsp;
{{ Form::submit('修正',array('class'=>'btn btn-success span2')) }}
 </td>
 </tr>
 </tbody>
 </table>
{{ Form::token() }}
{{ Form::close() }}
 <br>
 <div id="pagetop"><a href="#hpb-container">このページの先頭へ</a></div>
 </div>
 <!-- main end -->
 </div>
 <!-- wrapper end -->
@stop
  • 13-15行目:バリデーションエラーが発生した場合、入力フィールドのすぐ下にエラーメッセージが表示されます。30-33行目も同様です。
  • 50行目:トークンチェック用にトークンを埋め込んでいます。

ブラウザで確認してみます。

http://localhost/laravel4/public/collection/update/134

laravel4_078

無事にデータが修正されていればOKです。

« »

コメントを残す

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