Laravel

【Laravel】掲示板を作成する(4)新規投稿機能、コメント投稿機能

2021/02/23

Laravelによる掲示板の作成、第4回です。
今回は「新規投稿」機能と「コメント」機能についてポストします。投稿後にはフラッシュメッセージを表示するようにもしたいと思います。

7.新規投稿機能の作成

本文を投稿する画面と機能を作成します。
また、投稿完了時にフラッシュデータで「新規投稿しました」と表示させるようします。

ルーティング追記

投稿作成画面の表示・処理作成のためのルーティングを追加します。

編集ファイル:routes/web.php

バリデーション作成

まずは仕様。軽く以下のようにしておきます。

名前:必須、40文字まで
件名:必須、80文字まで
メッセージ:必須、350文字まで
カテゴリ:必須、整数

フォームリクエストを作成

フォームリクエストを利用してバリデーションファイルを作成します。下記コマンドを発行します。

コマンドが成功したら app\Http\Requests 配下に「PostRequest.php」が作成されるので編集します。
エラーメッセージの日本語化アクションは新たに追記します。

編集ファイル:app\Http\Requests\PostRequest.php

Postモデルに割り当て許可を記述

必要なセキュリティ上の仕様とのこと。
これを怠ると、『Add [***] to fillable property to allow mass assignment on *** 』というエラーが出ます。
詳しくは以下のサイト様を参照。

編集ファイル:app\Post.php

Postsコントローラーにアクションを追加

編集ファイル:app\Http\Controllers\PostsController.php

createメソッドは画面を表示するだけの内容。
storeメソッドはバリデーションを通過してきた内容を$savedata配列で整形し、fillメソッドを使用してホワイトリストを利用し、saveメソッドでデータベースに保存するようにしています。

「新規投稿」ボタンを一覧画面に追加

編集ファイル:resources\views\bbs\index.blade.php

一覧画面にフラッシュメッセージ用の処理を追加

先程作成した新規投稿ボタンの近くに以下を追加。

「一覧に戻る」ボタンを詳細画面へ追加

忘れていたので追加します。

編集ファイル:resources\views\bbs\show.blade.php

投稿画面ビューを作成

↑ カテゴリーのフォームは、プルダウンの出し方をまだ知らないので数字を入力するフォームで代用します。

投稿作成ページキャプチャ

バリデーションエラーキャプチャ

新規投稿作成後の一覧

詳細画面キャプチャ

8.コメント投稿

コメントを投稿できるように機能追加します。コメントは、投稿詳細から行えるようにします。
コメント投稿後にフラッシュデータで「コメントを投稿しました」と表示させます。

コントローラーの作成・編集

コントローラーを作成・編集します。下記コマンドで、app\Http\Controllers\CommentsController.php が作成されます。

ルーティング追記

編集ファイル:routes/web.php

バリデーション作成

まずは仕様。軽く以下のようにしておきます。

名前:必須、40文字まで
コメント:必須、350文字まで

フォームリクエストを作成

フォームリクエストを利用してバリデーションファイルを作成します。

上記のコマンド発行で app\Http\Requests 配下に「CommentRequest.php」が作成されるので編集します。エラーメッセージの日本語化メソッド(messages())は新たに追記します。

Commentモデルに割り当て許可を記述

編集ファイル:app\Comment.php

Commentsコントローラーにアクションを追加

編集ファイル:app\Http\Controllers\CommentsController.php

storeメソッドを作成します。

バリデーションを通過してきた内容を savedata 配列で整形し、fillメソッドを使用してホワイトリストを利用し、saveメソッドでデータベースに保存するようにしています。

DB登録後は、コメント投稿をした詳細画面にリダイレクトされるようにします。

詳細画面のビューにコメント用フォームを追加

編集ファイル:resources\views\bbs\show.blade.php

詳細画面へコメント用フォームを追記します。

コメント投稿フォーム(投稿詳細)キャプチャ

コメント投稿フォームバリデーションエラー

コメント投稿完了画面キャプチャ

駆け足でしたが、新規投稿機能と詳細画面からのコメント投稿機能を作成しました。
次回は投稿の編集機能と、投稿の物理削除機能についてポストしたいと思います。

-Laravel
-,