ファイル構成
・ビュー
ユーザー情報更新画面
「resources/views/person」フォルダ内の「update.blade.php」
ユーザー情報一覧画面(更新後)
「resources/views/person」フォルダ内の「index.blade.php」
・モデル
「app」フォルダ内の「User.php」
・コントローラ
app/Http/Controllers」フォルダ内の「UsersController.php 」
・ルーティング
「routes」フォルダ内の「wep.php」
ビュー
テンプレートファイル
updata.blade.php(ユーザー情報更新画面)
@extends('layouts.temp') ➀
@section('title','ユーザー情報更新画面') ➁
@section('content') ➂
@if (count($errors) > 0) ➃
<div>
<ul>
@foreach ($errors->all() as $error) ➄
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="/user/update" method="post">
<table>
<input type="hidden" name="id" value="{{$formdata->id}}"> ➅
<tr><th>user:</th><td><input type="text" name="user" value=
"{{$formdata->user}}"></td></tr> ➆
<tr><th>email:</th><td><input type="text" name="email" value=
"{{$formdata->email}}"></td></tr> ➆
<tr><th>age:</th><td><input type="number" name="age" value=
"{{$formdata->age}}"></td></tr> ➆
<tr><th></th><td><input type="submit" value="更新"></td></tr>
</table>
<br><a href="/user">ユーザー情報一覧へ</a>
</form>
@endsection
➀extends('layouts.temp')
「views」フォルダの「layouts」の「temp.blade.php」を継承
➁@section('title', 'ユーザー情報登録画面')
'title'という区画(@section)に「ユーザー情報登録画面」という文字列を組みこむ
レイアウト位置は、「temp.blade.php」の@yield('title') 下記のソースコード
➂contentという区画 下記では@yield('content')
➃バリデーションチェックでエラーがある場合、表示。
➄エラーメッセージを表示させるための処理を実行
➅type属性をhiddenにしたときはブラウザには何も表示されない。
➆$formdataオブジェクトから値を取り出して出力
「temp.blade.php」(ユーザー情報登録画面、ユーザー情報一覧のレイアウトファイル)
<html>
<head>
<title>@yield('title')</title>
<style>
h1 {font-size:30pt;}
h2 {font-size:10pt;}
.content{margin:10px;}
</style>
</head>
<body>
<h1>@yield('title')</h1>
<hr size="1">
<h2>@yield('order')</h2>
<div class='content'>
@yield('content')
</div>
</body>
</html>
「index.blade.php」(ユーザー情報一覧画面)
「resources/views/person」フォルダ内
@extends('layouts.temp') ➀
@section('title','ユーザー登録者情報')
@section('content')
<table>
<tr><th>User</th><th>Email</th><th>Age</th></tr>
@foreach ($lists as $list) ➁
<tr>
<td>{{$list->user}}</td>
<td>{{$list->email}}</td>
<td>{{$list->age}}</td>
</tr>
@endforeach
</table>
<a href="/user/create">ユーザー情報登録へ</a>
@endsection
➀「views」フォルダの「layouts」の「temp.blade.php」を継承
➁listsで受け取ったレコードをforeachで順に出力
・モデル
「app」フォルダ内の「User.php」
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function getData()
{
return $this->id.':'.$this->user.'('.$this->age.')';
}
public $timestamps = false;
protected $guarded = array('id');
public static $rules = array(
'user' => 'required',
'email' => 'email',
'age' => 'integer|min:0|max:100'
);
}
ユーザー情報登録画面ときとソースコードが一緒なので説明を省略します。
・コントローラ
「app/Http/Controllers」フォルダ内の「UsersController.php 」
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
class UserController extends Controller ➀
{
public function index(Request $request)
{
$lists =User::all(); ➁
return view('user.index',['lists' => $lists]); ➂
}
public function edit(Request $request)
{
$user = User::find($request->id); ➃
return view('user.update',['formdata' => $user]); ➄
}
public function update(Request $request)
{
$this->validate($request, User::$rules); ➅
$user = user::find($request->id); ➆
$formdata = $request->all(); ➇
unset($formdata['_token']); ➈
$user->fill($formdata)->save(); ➉
return redirect('/user'); ⑪
}
}
➀controllerクラスを継承したUserControllerクラス
➁モデルクラスのallメソッドでレコード全件取得し$listに格納。
➂レコードデータが格納している$listsをビュー側で(テンプレートファイル:「views」フォルダ内の「user」フォルダのindex.blade.php)で使用できるようにして、ビューに返す
➃モデルクラスのfindメソッドでリクエストで渡ってきたidのレコード検索し、$userに格納。
➄レコード検索を検索したデータ$userをビュー側で(テンプレートファイル:「views」フォルダ内の「user」フォルダのupdata.blade.php)で使用できるようにして、ビュー返す
➅バリデーションの実行
モデルクラス「User.php」でバリデーションのルールを設定したvalidateメソッドで実行。
➆リクエストで渡ってきたidパラメータの値を取得し、モデルクラスのfindメソッドで指定のidで検索し、取得したデータを$userに格納
➇フォームで入力してきたデータを$formdataに格納
➈隠しCSRFトークンフィールドを$formdataからunsetで削除
➉オブジェクト変数($user)にform入力値データをモデルのプロパティに代入して保存。
⑪ユーザー情報一覧へリダイレクト
ルーティング
「routes」フォルダ内の「wep.php」
Route::get('user','UserController@index'); ➀
Route::get('user/update','UserController@edit'); ➁
Route::post('user/update','UserController@update'); ➂
➀ レコード一覧を表示をするルーティング情報
➁ レコードを更新するgetアクセスのルーティング情報
➂レコードを更新するposetアクセスのルーティング情報
ユーザー情報テーブル「users」のカラム「id」=1のレコードを更新する。
/user/update?id=1とアクセス
yamadaさんのユーザー情報が表示
値を以下に変更
user: yamaguti
email: yamaguti@co.jp
age :30
に更新
「更新」ボタンをクリック