🔰

LaravelでTodoリストを実装してみよう!~実装編4:Todo削除・完了機能の実装~

2024/09/26に公開

はじめに

今回は、Todo削除・完了機能を実装していこうと思います!
前回の記事からかなり時間がたってしまって申し訳ないです

前回の記事はこちら↓
https://zenn.dev/kenberu1200/articles/6deaa52b17b4cd

Todo削除機能の作成

まずは削除機能を実装していきます!

コントローラーの作成

最初に、コントローラーを作成します!

コントローラーファイルの生成には、以下のコマンドを実行します。

sail artisan make:controller Todolist/DeleteTodo/DeleteTodoController --invokable

生成されたapp/Http/Controllers/Todolist/DeleteTodo/DeleteTodoController.phpファイルを以下のように書き換えます。

app/Http/Controllers/Todolist/DeleteTodo/DeleteTodoController.php
<?php

namespace App\Http\Controllers\Todolist\DeleteTodo;

use App\Http\Controllers\Controller;
+ use App\Models\Todolist;
use Illuminate\Http\Request;

class DeleteTodoController extends Controller
{
    /**
     * Handle the incoming request.
     */
    public function __invoke(Request $request)
    {
+        $todoId = $request->route('todoId');
+        $todo   = Todolist::where('id', $todoId)->firstOrFail();
+        $todo->delete();
+        return redirect()->route('todolist');
    }
}

ルーティング

routes/web.phpに以下のコードを書き加えます。

routes/web.php
//// 省略 ////
Route::delete('todo/delete/{todoId}', \App\Http\Controllers\Todolist\DeleteTodo\DeleteTodoController::class)
    ->name('deletetodo')->where('todoId', '[0-9]+');

動作確認

今回は、実装編1にて削除ボタンのコンポーネントを作っているので、ビューの修正はありません。

http://localhost/todolistにアクセスして、適当なTodoの削除ボタンを押してみて、Todoが一覧から削除されたら正常に動作しています!

Todo完了機能の作成

続いて、完了したTodoを処理するための機能を作っていきます!

コントローラーの作成

まず、コントローラーを作成していきます。

sail artisan make:controller Todolist/CheckTodoController --invokable

生成されたapp/Http/Controllers/Todolist/CheckTodoController.phpを以下のように書き換えます。

app/Http/Controllers/Todolist/CheckTodoController.php
<?php

namespace App\Http\Controllers\Todolist;

use App\Http\Controllers\Controller;
+ use App\Models\Todolist;
use Illuminate\Http\Request;

class CheckTodoController extends Controller
{
    /**
     * Handle the incoming request.
     */
    public function __invoke(Request $request)
    {
+        $todoId = $request->route('todoId');
+        $todo   = Todolist::where('id', $todoId)->firstOrFail();
+        $todo->status = 1;
+        $todo->save();
+        return redirect()->route('todolist');
    }
}

ルーティング

routes/web.phpに以下のコードを書き加えます。

routes/web.php
//// 省略 ////
Route::put('todo/checktodo/{todoId}', \App\Http\Controllers\Todolist\CheckTodoController::class)
    ->name('checktodo')->where('todoId', '[0-9]+');

動作確認

http://localhost/todolistにアクセスして、適当なTodoのチェックボタンを押してみます。
リストから消えていれば成功です!

おわりに

今回は、Todoの削除と完了機能を実装しました!

次回は、Todoの復元機能を作っていきたいと思います!

ではでは!

Discussion