Laravelの無料チュートリアル④つぶやきの編集と削除

Laravelの無料チュートリアル④つぶやきの編集と削除

1096 回閲覧されました

みなさんこんにちは、jonioです。

今回はつぶやきを編集して更新するのとつぶやきを削除する解説です。

1回目の解説から読んで欲しいのですが読んでない方は↓からどうぞ。

今回が最後の解説になります。

まずはつぶやきを編集して更新する処理です。

 

つぶやきを編集して更新する処理

つぶやきを編集して更新する時ですが下記が必要になります。

  • つぶやきを編集するページの表示
  • つぶやきを編集できる様にする為の処理
  • つぶやきを更新する処理

まずはつぶやきを更新するページを表示するための処理をします。

リソースコントローラーを使っていてルーティングは必要ないのでコントローラーからです。

 

つぶやきを更新するページを表示するコントローラー

↓の7つのアクションの内どれに当たるか分かりますか?

  • index : つぶやき一覧の表示
  • create : つぶやきの作成
  • show : 複数あるつぶやきの内の1つの表示
  • store : 作成したつぶやきの保存
  • update : つぶやきを編集した時の更新
  • edit : つぶやきの内容の編集
  • destroy : つぶやきの削除

下から2つ目のeditアクションですよね。

だからPostコントローラーのeditアクションに記述をします。

この時のビューはedit.blade.phpですが「php artisan route:list」をして↓から分かります。

PostController.phpのコードを↓にします。

次はビューを作成します。

 

つぶやきを更新するページ

postフォルダの下にedit.blade.phpを作成します。

つぶやきを更新するページですがつぶやきを作成するページに似ている方がやりやすいですよね(↓がつぶやきを作成するページ)

↑はcreate.blade.phpですが中身をコピーしてedit.blade.phpに貼ります。

貼った状態が↓です。

今はつぶやきの内容を編集するページなので少し変えます。

これで「http://localhost:8888/post/1/edit」にアクセスすると↓になります。

1」が分からないと思いますが後で説明するので今はとりあえずURLにアクセスして下さい。

 これでつぶやきを編集するページを表示する事ができたので次はつぶやきを更新する処理です。

 

つぶやきを編集できる様にするコントローラー

つぶやきを編集する時ですがつぶやき一覧が表示されているページ(index.blade.php)に編集ボタンがあった方がアプリが使いやすいですよね?

だからindex.blade.phpに記述を追加します。

これで「http://localhost:8888/post」にアクセスすると↓の表示になります。

それではコントローラーの記述をしますが青色の背景色の編集ボタンをクリックした時にPostコントローラーにつぶやきの情報を渡してつぶやきの編集ページに反映させますがそれができるようにするためにindex.blade.phpを少し修正します。

10行目に「{{route(post.edit,$post)}}」を追加しています。

post.editは何度も登場しているphp artisan route:listで分かります。

コントローラーからビューに情報を渡す事ができますがビューからコントローラーにも情報を渡す事ができてそれが$postです。

$postはindex.blade.phpの中の記述の「@foreach($posts as $post)」の$postと同じです。

$postでビュー(index.blade.php)からPostコントローラーに情報が渡されてそこから編集するページ(edit.blade.php)に情報を渡します。

先ほど編集するページである「http://localhost:8888/post/1/edit」にアクセスしたのを覚えていますでしょうか?

この1に当たるのが$postです。

1はカラムのidの番号なのですがphpMyAdminで確認できます。

つぶやきの1つ1つにid番号が振られています。

それではPostコントローラーのeditアクションで$postを受け取る事ができるようにします。

65行目の「edit(Post $post)」ですがindex.blade.phpの「{{route(post.edit,$post)}}」の$postと同じです。

Post $post」でPostモデルの情報を$postで使う事ができるという意味です。

これでindex.blade.phpに表示されるつぶやきの下にある編集ボタンをクリックするとそれぞれのつぶやきに対して編集画面に移動します。

今の状態ではどのつぶやきの編集画面も同じ表示になります。

後でどのつぶやきを編集しようとしているかが分かる様にしますが今はとりあえずURLが違う事で他のつぶやきの編集画面に入っている事を確認して下さい。(↓の2がつぶやきによって変わるはずです)

それではどのつぶやきを編集しているかが分かる様にします。

つぶやきを編集するビューのedit.blade.phpを修正します。

7行目の「post.update」ですがつぶやきを更新するからこれになります。

9行目ですが更新内容を保存する時は8行目の「@csrf」の下に「@method(‘put’)」を付けるのを知っておきましょう。

12行目ですが「{{$post->body}}」の$postですがPostコントローラーのeditアクションから渡された情報です。

「->body」がデータベースのbodyカラムの値(つぶやき)になります。

だから「$post->body」で該当するつぶやきの内容になります。

これでつぶやき一覧のページ(index.blade.php)でどれでもいいので編集ボタンを押すとつぶやきの編集のページでつぶやきの内容が表示されます。

 

編集を保存するコントローラ

編集を保存するのは↓のアクションのどれになるか分かりますか?

  • index : つぶやき一覧の表示
  • create : つぶやきの作成
  • show : 複数あるつぶやきの内の1つの表示
  • store : 作成したつぶやきの保存
  • update : つぶやきを編集した時の更新
  • edit : つぶやきの内容の編集
  • destroy : つぶやきの削除

下から3つ目のupdateアクションですよね。

だからPostController.phpのupdateアクションに記述します。

77行目の「Post $post」ですがPostモデルを変数$postとして使うという意味です。

79行目の「$post->body」がpostテーブルのbodyカラムという意味で「$request->body」がつぶやきを編集するページで編集した内容(↓の赤枠)という意味です。

だから編集したつぶやきをpostテーブルのbodyカラムに代入する(更新する)となります。

80行目は更新する内容を保存するという意味です。

81行目の「redirect(‘post’)」は「http://localhost:8888/post」にリダイレクトするという意味です。

これでつぶやきの更新が完成しました。

最後はつぶやきの削除です。

 

削除のコントローラ

Postコントローラーに記述する前につぶやきの一覧ページ(index.blade.php)に削除ボタンを作成します。

これで↓の表示になります。

編集ボタン(11行目)はaタグの中に入れましたが削除ボタン(16行目)はformタグの中に入れないといけないのは知っておきましょう。

16行目の「onClick=return confirm(‘本当に削除しますか?’);」ですがjQueryを使っていて削除ボタンを押した時に確認が表示されます。

これを解説しないので気になる人は調べて下さい。

つぶやきを削除するのは↓のアクションのどれになるか分かりますか?

  • index : つぶやき一覧の表示
  • create : つぶやきの作成
  • show : 複数あるつぶやきの内の1つの表示
  • store : 作成したつぶやきの保存
  • update : つぶやきを編集した時の更新
  • edit : つぶやきの内容の編集
  • destroy : つぶやきの削除

一番下ですよね。

だからPostコントローラーのdestroyアクションに記述します。

またindex.blade.phpの削除ボタンを押した時に情報をコントローラーに渡します。

17行目ですが削除する時は16行目の「@csrf」の下に「@method(delete)」を書くのは知っておきましょう。

これで削除ボタンを押すとつぶやきを削除できます。

これでつぶやきを投稿するアプリの完成です。

 

今回のアプリに関して

今回のアプリはログインしてからつぶやきを作成しましたがログインしなくてもつぶやきを作成できます。

通常はログインしないとつぶやきを作成するページに飛べない様にしますがLaravelに慣れるのを重点に置いているのでログインしなくてもつぶやきを作成できるようにしています。

またログイン機能にlaravel/uiを使っていますがこれは現在Laravel公式で非推奨になっていますがログイン機能の練習と思ってあえて使っています。

私はBreezeでログイン機能を入れていますが練習で導入してみたいという方は使ってみて下さい。

今回のチュートリアルがLaravelで仕事をしたい人の助けになれば幸いです。