この記事のゴール
- Laravelで作成したWEBサイト上から指定したレコードを削除する。
前提条件
- レコード挿入、検索、更新まではできている。
※まだの場合は、前回の記事を参考にしてください。
これからやる作業
- コントローラー編集
- ルーティング
- Bladeテンプレート編集
コントローラー編集
[app/Http/Controllers/TodoController.php] を次のように編集します。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Todo;
class TodoController extends Controller
{
public function index()
{
return view('todo.index', [
'pageTitle' => 'TODOリスト',
'todos' => Todo::all(),
]);
}
public function retrieve($id)
{
return view('todo.detail', [
'pageTitle' => 'TODO詳細',
'todo' => Todo::find($id),
]);
}
public function create()
{
return view('todo.create', [
'pageTitle' => 'TODO新規登録',
]);
}
public function store(Request $request)
{
$this->validate($request, Todo::$rules);
$todo = new Todo();
$todo->fill($request->except('_token'))->save();
return redirect(route('todo.index'));
}
public function edit($id)
{
return view('todo.edit', [
'pageTitle' => 'TODO編集',
'todo' => Todo::find($id),
]);
}
public function update(Request $request, $id)
{
$this->validate($request, Todo::$rules);
$todo = Todo::findOrFail($id);
$todo->fill($request->except('_token', '_method'))->save();
return redirect(route('todo.detail', ['id' => $id]));
}
public function destroy($id)
{
$todo = Todo::findOrFail($id);
$todo->delete();
return redirect(route('todo.index'));
}
}
57行目~62行目を追記しています。
ルーティング
[routes/web.php] に次の行を追記して保存します。
Route::delete('/destroy/{id}', [TodoController::class, 'destroy'])->whereNumber('id')->name('destroy');
![](https://macocci7.net/blog/wp-content/uploads/2023/05/delete01-1024x205.png)
Bladeテンプレート編集
詳細ページに削除のリンクを設置します。
[resouces/views/todo/detail.blade.php] を次のように編集して保存します。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{{$pageTitle}}</title>
</head>
<body>
<h1>{{$pageTitle}}</h1>
@isset($todo)
<p>
<a href="{{route('todo.edit', ['id' => $todo->id])}}">[編集]</a>
<form method="POST" action="{{route('todo.destroy', ['id' => $todo->id])}}"
onClick="event.preventDefault();this.closest('form').submit()"
>
@csrf
@method('delete')
<a href="">[削除]</a>
</form>
やること: {{$todo->todo}}<br />
状態:{{$todo->done ? '完了' : '未完'}}
</p>
@else
<p>情報がありません。</p>
@endisset
<a href="{{route('todo.index')}}">todo一覧</a>
</body>
</html>
12行目~18行目に削除のリンクを追記しています。
ブラウザで確認
ブラウザのアドレスバーに http://localhost/todo/1 を入力してアクセスします。
![](https://macocci7.net/blog/wp-content/uploads/2023/05/delete02-1.png)
削除のリンクをクリックします。
一覧ページへリダイレクトして、1件目の「【済】Aプロジェクト巻取改修」が
削除されていることが確認できます。
![](https://macocci7.net/blog/wp-content/uploads/2023/05/delete04.png)
今回はこれで完了です。
次回は自動テストを予定しています。
お疲れさまでした。
コメント