k.watanabe技術者ブログ

k.watanabe

Laravelでお問い合わせフォームを作成

はじめに

お問い合わせフォームを作成し、Gmailと連携が出来るように実装しました。デザインはtailblocksを使用しています。tailblocksはヘッダーや本文のレイアウトやお問い合わせフォームなどのデザインがテンプレートとして用意されており、気軽に利用出来るので便利です。今回はtailblocksのテンプレートを利用してお問い合わせフォームを作成しましたので、その使い方も含めてまとめました。


参考記事:ウツボウTECH

手順1: 入力ページの作成

まずは入力ページを作成し、テンプレートを表示させます。デザインはtailblocksを使用します。

ルーティングの設定

routes/web.php

  1. Route::get('contact', [MailController::class, 'create'])->name('mail.index');

MailControllerを新規で作成しました。

Controllers/MailController.php

  1. class MailController extends Controller
  2. {
  3.     /**
  4.      * Display the login view.
  5.      */
  6.     public function create(): View
  7.     {
  8.         return view('mail.index');
  9.     }

テンプレートのデザインについては後述します。

resources/View/Mail/index.blade.php

管理画面ログイン

手順2: tailblocksの使い方

tailblocksはCSS/JavaScript製のオープンソース・ソフトウェアです。ブロックデザインパターンとして用意された中からコピーして貼り付けるだけで使用出来ます。まず、前提としてlaravel breezeをインストールしておく必要があります。


composerを使ってlaravel/breezeパッケージを追加する

  1. $ composer require laravel/breeze --dev

artisanコマンドでインストールする

  1. $ php artisan breeze:install

headタグの中にviteを使い、app.cssを読み込ませる。

  1. vite(['resources/css/app.css', 'resources/css/blog_style.css', 'resources/js/app.js'])
こちらがtailwindの公式サイトです。

サイトからおと言い合わせフォームのデザインを選択して、コードをコピーします。あとはbuildするだけでデザインが反映されます

  1. $ npm run build

手順3: バリデーションの実装

artisanコマンドでリクエストクラスを作成する。


  1. php artisan make:request MailRequest


authorizeメソッドは認証しているかどうかチェックしたい時に使用する。デフォルトではfalseになっているので403エラーになってしまう。trueを返すか、使用しないのであれば削除する。

  1. <?php
  2. namespace App\Http\Requests;
  3. use Illuminate\Foundation\Http\FormRequest;
  4. class MailRequest extends FormRequest
  5. {
  6.     /**
  7.      * Determine if the user is authorized to make this request.
  8.      *
  9.      * @return bool
  10.      */
  11.     public function authorize()
  12.     {
  13.         return true;
  14.     }
  15.     /**
  16.      * Get the validation rules that apply to the request.
  17.      *
  18.      * @return array<string, mixed>
  19.      */
  20.     public function rules()
  21.     {
  22.         return [
  23.             'name' => 'required|max:20',
  24.             'email' => 'required|email|max:100',
  25.             'message' => 'required|max:500',
  26.         ];
  27.     }
  28. }

バリデーションにnameとemailとmessageに対してrequire(必須)とmax(上限)のチェックを指定した。

  1.  /**
  2.      * Display the login view.
  3.      */
  4.     public function confirm(MailRequest $request): View
  5.     {
  6.         return view('mail.confirm', ['contents' => $request->validated()]);
  7.     }

第一引数にMailRequestを指定することで、MailController.phpが呼ばれる前にMailRequest.phpでチェックを行なっている。

パラメーターを受け取る場合は以下のようにする。

  1. $params = $request->validated();

手順4: バリデーションメッセージを日本語で表示させる

configファイルをjaに変更する。


config/app.php


  1. 'locale' => 'ja',

デフォルトではenとなっているのでjaに変更

resources/lang/en/validation.phpファイルをresources/lang/ja/にコピーする。

日本語の訳を以下の公式サイトからコピーして日本語用のvalidation.phpファイルを作成する。

Laravel 9.x validation.php言語ファイル

resources/lang/ja/validation.php

  1. attributes' => [
  2.         'name' => '氏名',
  3.         'email' => 'メールアドレス',
  4.         'message' => '本文',
  5. ],

そのままだとバリデーション表示時にnameやemailと表示されるので、keyに対してそれぞれ日本語を指定する。

管理画面ログイン
記事一覧に戻る

プロフィールに戻る