目的
- アプリを作成する上で基本となるCRUD処理を有したLaravelアプリをチュートリアル的に作成する方法をまとめる
実施環境
- ハードウェア環境
項目 | 情報 |
---|---|
OS | macOS Catalina(10.15.5) |
ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
プロセッサ | 2 GHz クアッドコアIntel Core i5 |
メモリ | 32 GB 3733 MHz LPDDR4 |
グラフィックス | Intel Iris Plus Graphics 1536 MB |
- ソフトウェア環境
項目 | 情報 | 備考 |
---|---|---|
PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
Laravel バージョン | 7.0.8 | commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う |
MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする |
前提条件
- 実施環境に近い環境が構築されていること。
- 筆者は下記の方法で環境構築を行った。
前提情報
- ソースコードはこちら→https://github.com/miriwo0104/laravel_crud/tree/master
- DockerやAWSなどは使用せずにMacのローカルに実施環境と同じLaravel開発環境を構築して実施する。
- チュートリアルで実際に筆者が作成したソースコードをGitHubにて公開予定である。
- CRUD処理の作成完了を最短目標にしてバリデーションなどは後々設定することとする。
- 実施環境と同じ環境がDockerやAWSで用意できるなら都度読み替えていただければ実施が可能だと思う。
- 公式ドキュメントと一冊の技術書を元に本記事を記載する。
- Laravel 7.x
- PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応
- 本記事はシリーズとして内容を分割する予定である。記事のタグ「miriwo_laravelチュートリアル」を本シリーズの記事に付与するのでそのほかの記事がみたい方は活用していただきたい。
- メール送信を用いた問い合わせフォームを作成するがメールは実際には送信されず、Laravelのログにメールの内容が記載される。
- メールは送信されないが、メール宛先は「admin@example」とする。
この記事の読後感
- 問い合わせ内容がメールで送信される問い合わせフォームの作成を行うことができる。
概要
- .envファイルの修正
- ルーティング情報の記載
- コントローラファイルの作成と記載
- ビューファイルの作成
- メーラブルクラスファイルの作成と記載
- メール用ビューファイルの作成
- 確認
詳細
- .envファイルの修正
-
laravel_crudディレクトリで下記コマンドを実行して.envファイルを開く。
$ vi .env
-
下記の用に修正する。
laravel_crud/.envMAIL_DRIVER=log
-
.envファイルの全内容を下記に記載する。
laravel_crud/.envAPP_NAME=Laravel APP_ENV=local APP_KEY=base64:PhtimgDQlzxAtGZFzq9THwWFHHGdZuM5Sxdw71bD6ew= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_crud_data DB_USERNAME=root DB_PASSWORD=MySQLのrootのパスワード BROADCAST_DRIVER=log CACHE_DRIVER=file QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_DRIVER=log MAIL_HOST=127.0.0.1 MAIL_PORT=1025 MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=admin@gmail.com MAIL_FROM_NAME=admin MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_PRETEND=false AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
-
- ルーティング情報の記載
-
laravel_crudディレクトリで下記コマンドを実行してルーティングファイルを作成する。
$ vi routes/web.php
-
開いたルーティングファイルを下記のルーティング情報を追記する。
laravel_crud/routes/web.phpRoute::get('/inquiry/input', 'InquiryController@input'); Route::post('/inquiry/send', 'InquiryController@send');
-
下記にルーティングファイルの全体内容を記載する。
laravel_crud/routes/web.php<?php use Illuminate\Support\Facades\Route; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Auth::routes(); Route::get('/home', 'HomeController@index')->name('home'); // 下記を追記 Route::get('/inquiry/input', 'InquiryController@input')->name('inquiry.input'); Route::post('/inquiry/send', 'InquiryController@send')->name('inquiry.send'); // 上記までを追記 Route::get('/input', 'ContentController@input')->name('input'); Route::post('/save', 'ContentController@save')->name('save'); Route::get('/output', 'ContentController@output')->name('output'); Route::post('/delete', 'ContentController@delete')->name('delete'); Route::get('/edit/{content_id}', 'ContentController@edit')->name('edit'); Route::post('/update', 'ContentController@update')->name('update');
-
保存して閉じる。
-
- コントローラファイルの作成と編集
-
laravel_crudディレクトリで下記コマンドを実行してメール送信用のコントローラファイルを作成する。
$ php artisan make:controller InquiryController
-
laravel_crudディレクトリで下記コマンドを実行して先に作成したコントローラファイルを開く。
$ vi app/Http/Controllers/InquiryController.php
-
開いたコントローラファイルを下記の様に修正する。
laravel_crud/app/Http/Controllers/InquiryController.php<?php namespace App\Http\Controllers; use Illuminate\Http\Request; //下記を追記する use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Auth; use App\Mail\SendMail; //上記までを追記する class InquiryController extends Controller { //下記を追記する public function input() { $user_infos = Auth::user(); return view('inquiries.input', [ 'user_infos' => $user_infos, ]); } public function send(Request $request) { $inquiry_content = $request->all(); Mail::to('admin@example')->send(new SendMail($inquiry_content)); return redirect(route('home')); } //上記までを追記する }
-
保存して閉じる
-
- ビューファイルの作成と編集
-
アプリ名ディレクトリで下記コマンドを実行してビューファイルを格納するディレクトリを作成する。
$ mkdir resources/views/inquiries
-
laravel_crudディレクトリで下記コマンドを実行してビューファイルを開く。
$ vi resources/views/inquiries/input.blade.php
-
開いたビューファイルを下記の様に修正する。
laravel_crud/resources/views/inquiries/input.blade.php<form action="{{ route('inquiry.send') }}" method="POST"> @csrf <p>お問い合わせ内容</p> <textarea name="content" cols="30" rows="10"></textarea> <p>お客様のお名前</p> <input type="text" name="name" value="{{ $user_infos['name'] }}"> <p>お客様のメールアドレス</p> <p>{{ $user_infos['email'] }}</p> <input type="hidden" name="email" value="{{ $user_infos['email'] }}"> <br> <input type="submit" value="送信"> </form>
-
- メーラブルクラスファイルの作成と記載
-
laravel_crudディレクトリで下記コマンドを実行してメール送信専用のクラスが記載されたファイルを作成する。
$ php artisan make:mail SendMail
-
laravel_crudディレクトリで下記コマンドを実行して先に作成したメール送信専用のクラスファイルを開く
$ vi app/Mail/SendMail.php
-
開いたクラスファイルを下記の様に修正する。
laravel_crud/app/Mail/SendMail.php<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class SendMail extends Mailable { use Queueable, SerializesModels; // 下記を追記する public $inquiry_content; /** * Create a new message instance. * * @return void */ // 下記を修正する public function __construct($inquiry_content) { // 下記を追記する $this->inquiry_content = $inquiry_content; } /** * Build the message. * * @return $this */ public function build() { // 下記を追記する return $this //メールの件名 ->subject('inquiry mail') //メールとして表示したいビューファイル ->view('mails.inquiry_mail') ->with([ 'inquiry_content' => $this->inquiry_content, ]); // 上記までを追記する } }
-
- メール用ビューファイルの作成
-
laravel_crudディレクトリで下記コマンドを実行してメールとして表示したいビューファイルを格納するディレクトリを作成する。
$ mkdir resources/views/mails
-
アプリ名で下記コマンドを実行してメールとして表示したいビューファイル作成する。
$ vi resources/views/mails/inquiry_mail.blade.php
-
開いたメールとして表示したいビューファイルを下記の様に編集する。
laravel_crud/resources/views/mails/inquiry_mail.blade.php下記の内容のお問い合わせメールです。 {{ $inquiry_content['content'] }} # 送信ユーザ名 {{ $inquiry_content['name'] }} # 送信ユーザメールアドレス {{ $inquiry_content['email'] }}
-
- 確認
-
laravel_crudディレクトリで下記コマンドを実行してローカルサーバを起動する。
$ php artisan serve
-
下記にアクセスしてログインもしくはユーザ登録を行う
-
下記にアクセスし、下記画像の画面がブラウザにて表示されることを確認する。(「お客様のお名前」と「お客様のメールアドレス」にはログイン中のユーザの情報が記載されていること。)
-
「お問い合わせ内容」下のテキストエリアに任意の内容を入力し、「送信」をクリックする。
-
http://127.0.0.1:8000/home
にリダイレクトすることを確認する。 -
laravel_crudディレクトリで下記コマンドを実行してログファイルを開く。
$ vi storage/logs/laravel.log
-
ログファイルの最終行付近に下記の様にメールの内容が記載されていれば作業完了である。
laravel_crud/storage/logs/laravel.logDate: Tue, 25 Aug 2020 09:37:02 +0000 Subject: inquiry mail From: To: admin@example MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable 下記の内容のお問い合わせメールです。 これはテストです # 送信ユーザ名 miriwo # 送信ユーザメールアドレス miriwo0517@gmail.com
-