Laravel(ユーザー情報更新画面)

ファイル構成

・ビュー

ユーザー情報更新画面

「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>
      @csrf
      <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

<?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

<?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($requestUser::$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のレコードを更新する。 

f:id:mkyosuke:20200130172603p:plain

/user/update?id=1とアクセス

yamadaさんのユーザー情報が表示

f:id:mkyosuke:20200130172719p:plain

値を以下に変更

user: yamaguti

email:  yamaguti@co.jp

age :30

に更新

f:id:mkyosuke:20200130173200p:plain

「更新」ボタンをクリック

 

f:id:mkyosuke:20200130173422p:plain