Laravel(ユーザー情報削除画面)

ファイル構成

・ビュー

ユーザー情報削除画面

「resources/views/person」フォルダ内の「delete.blade.php」​

ユーザー情報一覧画面(削除後)

「resources/views/person」フォルダ内の「index.blade.php」​

​・モデル

「app」フォルダ内の「User.php

・コントローラ

app/Http/Controllers」フォルダ内の「UsersController.php

 ・ルーティング

「routes」フォルダ内の「wep.php

 ビュー

テンプレートファイル

delete.blade.php(ユーザー情報削除画面)

@extends('layouts.temp') ➀

@section('title', 'ユーザー情報削除画面')  ➁

@section('content') ➂
   <form action="/user/delete" method="post">
   <table>
      @csrf
      <input type="hidden" name="id" value="{{$formdata->id}}">  
      <tr><th>user:</th><td>{{$formdata->user}}</td></tr>    
      <tr><th>email:</th><td>{{$formdata->email}}</td></tr>   
      <tr><th>age:</th><td>{{$formdata->age}}</td></tr>     
      <tr><th></th><td><input type="submit" value="削除"></td></tr>
   </table>
   </form>
@endsection

➀extends('layouts.temp')

「views」フォルダの「layouts」の「temp.blade.php」を継承

@section('title', 'ユーザー情報削除画面')

'title'という区画(@section)に「ユーザー情報削除画面」という文字列を組みこむ

レイアウト位置は、「temp.blade.php」の@yield('title') 下記のソースコード

➂contentという区画 下記では@yield('content')

➃type属性をhiddenにしたときはブラウザには何も表示されない。

➄ ➃では、name属性に値を用意していたが、あくまでもidを検索してきて削除をするだけなのでname属性をここでは設定はしていない。

 

「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.')';
    }
}

レコードを更新や登録の際にあったバリデーションのルールは今回記載していません。

登録画面や更新画面からフォームから値を入力してバリーデーションを通って、レコードを変更していたのですが、今回は、削除だけなのでバリデーションのルールは、省きます。

 

 ・コントローラ

「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 delete(Request $request)
    {
       $user = User::find($request->id);                  ➃
       return view('user.delete',['formdata' => $user]); ➄
    }

    public function remove(Request $request)
    {
       User::find($request->id)->delete();            ➅           
       return redirect('/user');                          ➆ 
    }
}

➀controllerクラスを継承したUserControllerクラス

➁モデルクラスのallメソッドでレコード全件取得し$listに格納。

➂レコードデータが格納している$listsをビュー側で(テンプレートファイル:「views」フォルダ内の「user」フォルダのindex.blade.php) で使用できるようにして、ビューに返している

➃モデルクラスのfindメソッドでリクエストで渡ってきたidのレコード検索し、$userに格納。

➄レコード検索を検索したデータ$userをビュー側で(テンプレートファイル:「views」フォルダ内の「user」フォルダのdelete.blade.php)で使用できるようにして、ビュー返す

➅$requestにはPOSTで受け取った情報(ユーザーが削除したいidプロパティ)が入っている。

findメソッドで指定されたid($requestのidプロパティ)に該当するレコードを取得し、モデルのdeleteメソッドを実行し、データベースから該当レコードを削除する。

➆ユーザー情報一覧へリダイレクト

 

ルーティング

「routes」フォルダ内の「wep.php

Route::get('user','UserController@index');        ➀     

Route::get('user/delete','UserController@delete');   ➁
Route::post('user/delete','UserController@remove');  ➂

➀レコード一覧を表示をするルーティング情報

➁レコードを削除するgetアクセスのルーティング情報

➂レコードを削除するpostアクセスのルーティング情報

 

ユーザー情報テーブル「users」のカラム「id」=1のレコードを削除する。

f:id:mkyosuke:20200130191602p:plain

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

 yamagutiさんの情報が表示

f:id:mkyosuke:20200130191703p:plain

「削除」ボタンをクリック

f:id:mkyosuke:20200130191818p:plain

yamagutiさんのレコードが削除されました。

f:id:mkyosuke:20200130191937p:plain