本文へ移動
Laravel Tips

はじめての方へ・ステップ 11 / 12

編集と削除をできるようにする

保存したメモを直す(編集・更新)と、メモを消す(削除)をできるようにして、メモ帳アプリを仕上げます。HTML のフォームで PUT と DELETE を送る @method の使い方も説明します。

最後に、保存したメモを直したり、消したりできるようにします。これで、一覧・作成・表示・編集・削除がそろい、メモ帳アプリのできあがりです。使うのは、MemoController に残っている edit・update・destroy の3つのメソッドです。

編集のフォームを作る(edit)#

edit メソッドで、編集のフォームのビューを返します。

php
public function edit(Memo $memo)
{
    return view('memos.edit', ['memo' => $memo]);
}

show と同じく、Memo $memo には URL の番号のメモが自動で入ります(ルートモデル結合)。

resources/views/memos/edit.blade.php を作ります。作成のフォームとよく似ています。

blade
<x-layout>
    <x-slot:title>メモを直す</x-slot>

    <h1>メモを直す</h1>

    <form method="POST" action="{{ route('memos.update', $memo) }}">
        @csrf
        @method('PUT')

        <p>
            <label for="title">タイトル</label><br>
            <input type="text" id="title" name="title" value="{{ old('title', $memo->title) }}">
        </p>
        @error('title')
            <p>{{ $message }}</p>
        @enderror

        <p>
            <label for="body">本文</label><br>
            <textarea id="body" name="body" rows="5">{{ old('body', $memo->body) }}</textarea>
        </p>
        @error('body')
            <p>{{ $message }}</p>
        @enderror

        <button type="submit">直した内容を保存する</button>
    </form>

    <p><a href="{{ route('memos.show', $memo) }}">メモへ戻る</a></p>
</x-layout>

作成のフォームとちがうところは3つです。

  • 送り先:route('memos.update', $memo) で、/memos/1 のような、そのメモの URL へ送ります
  • @method('PUT'):HTML のフォームは GET と POST しか送れません。そこで、POST で送りつつ「本当は PUT(更新)です」という印を隠れた入力欄に入れます。Laravel はこの印を見て、update メソッドに任せます
  • old('title', $memo->title):2つ目の値は、「戻ってきた入力が無いときに出す値」です。最初に開いたときは、いまのメモのタイトルが入ります

直して保存する(update)#

update メソッドを書きます。チェックのしかたは store と同じです。

php
public function update(Request $request, Memo $memo)
{
    $validated = $request->validate([
        'title' => ['required', 'max:100'],
        'body' => ['nullable', 'max:2000'],
    ]);

    // チェックを通った値で、いまのメモを書きかえて保存する
    $memo->update($validated);

    return redirect()->route('memos.show', $memo)->with('status', 'メモを直しました。');
}

$memo->update($validated) は、配列の値でメモを書きかえて、そのまま保存します。updated_at(最後に変えた日時)も自動で新しくなります。

メモを消す(destroy)#

destroy メソッドを書きます。

php
public function destroy(Memo $memo)
{
    $memo->delete();

    return redirect()->route('memos.index')->with('status', 'メモを消しました。');
}

消すときも、リンクではなくフォームで送ります。リンク(GET)は、ブラウザや検索エンジンが勝手に開くことがあるので、データを変える操作には使いません。

表示のページにボタンを置く#

resources/views/memos/show.blade.php の「一覧へ戻る」の上に、編集へのリンクと、削除のフォームを足します。

blade
<p><a href="{{ route('memos.edit', $memo) }}">このメモを直す</a></p>

<form method="POST" action="{{ route('memos.destroy', $memo) }}">
    @csrf
    @method('DELETE')

    <button type="submit" onclick="return confirm('このメモを消しますか?')">このメモを消す</button>
</form>

<p><a href="{{ route('memos.index') }}">一覧へ戻る</a></p>
  • @method('DELETE') で、「本当は DELETE(削除)です」という印を入れます。Laravel は destroy メソッドに任せます
  • onclick="return confirm('…')" は、押したときに確かめの小さな窓を出す JavaScript です。「キャンセル」を押すと送られません。うっかり消すのを防ぎます

試してみる#

  1. 一覧からメモを開き、「このメモを直す」を押す → いまの内容が入ったフォームが出る
  2. タイトルを書きかえて保存する → メモの表示のページに戻り、「メモを直しました。」と出る
  3. 「このメモを消す」を押し、確かめの窓で OK を押す → 一覧に戻り、「メモを消しました。」と出て、そのメモが消えている

注意

@method('PUT') や @method('DELETE') を書き忘れると、フォームは POST のまま送られます。すると「The POST method is not supported for route memos/1.」(この URL では POST は使えない)というエラーになります。

できあがったメモ帳アプリ#

おつかれさまでした。これでメモ帳アプリの完成です。作ったものを、もう一度ながめてみましょう。

作ったもの 場所
メモの表の手順書 database/migrations/…_create_memos_table.php
メモのモデル app/Models/Memo.php
メモのコントローラー app/Http/Controllers/MemoController.php
ルート routes/web.php(Route::resource('memos', MemoController::class);)
共通の枠 resources/views/components/layout.blade.php
一覧・作成・表示・編集の画面 resources/views/memos/ の index・create・show・edit

ここまでで使った「ルート → コントローラー → モデル → ビュー」の流れは、どんなに大きな Laravel のアプリでも同じです。掲示板なら「メモ」を「投稿」に、ToDo リストなら「やること」に置きかえれば、同じ手順で作れます。

次に読むページ#

公式ドキュメント(英語)

2026年10月5日時点の内容をもとに、日本語でまとめています。

ページの一覧