2022/02/27
以前、ローカル環境にて Laravel6 でログ出力でメール送信を行いました。
メールドライバをさくらレンタルサーバーを使う場合は以下をご参照ください。
今回は、サーバにデプロイして本番環境さながら、実際に送信してみようと思います。
サーバで公開するならHTMLバリデーションだけだと弱いので、Laravelでもバリデーションを設定します。
デモページ
デモサイト
【ベーシック認証】test@example.com / testtest
手順
Bootstrapのバリデーションデザインを実装
Bootstrap4 でバリデーション用のデザインがあるので、実装させます。
Bootstrap4テンプレート フォーム用(HTMLバリデーション)
フォームリクエスト設定
HTML5で新たに登場した required属性
ですが、ブラウザ(サファリ・IE)によってはrequired属性が効かないこともあります。
なのでフォームを公開するなら、Laravel側でもバリデーションを設定してあげます。
Bootstrap4 フォーム(HTML×Laravel バリデーション)
フォームリクエストのスケルトンをartisanコマンドで作成します。
php artisan make:request ContactRequest
artisanコマンドによって自動生成されたフォームリクエストの中身を記述していきます。
フォームリクエストのスケルトンは app\Http\Requests
に生成されます。
# app\Http\Requests\ContactRequest.php
:
/**
* 認証関係の判定を行う場合はここに処理を記述する
* 特にない場合常にtrueを返しておく
*/
public function authorize()
{
return true;
}
/**
* バリデーションルールを記述
*/
public function rules()
{
return [
'last_name' => 'required',
'first_name' => 'required',
'email' => 'required|email',
'note' => 'required',
];
}
/**
* エラーメッセージ
*/
public function messages()
{
return [
'required' => '必須項目です',
'email' => 'メールアドレスの形式で入力してください',
];
}
:
コントローラにある確認画面のメソッドの引数を先ほど作成したフォームリクエストのパスに設定します。
:
/**
* 確認画面
*/
public function confirm(\App\Http\Requests\ContactRequest $request)
{
// Bladeで使う変数
$hash = array(
'request' => $request,
'title' => 'メールフォーム デモ',
'subtitle' => '確認画面',
);
return view('contact.confirm')->with($hash);
}
:
表示ロジック(Blade)の箇所です。氏名の箇所だけ抜粋しました。
<!--氏名-->
<div class="form-row">
<div class="col-md-6 mb-3">
<label for="lastName">名字</label>
<input type="text" name="last_name" value="{{ old('last_name') }}" class="form-control @if($errors->has('last_name')) is-invalid @endif" id="lastName" placeholder="名字" required>
@if($errors->has('last_name'))
{{-- リクエストクラスのエラーメッセージ --}}
<div class="invalid-feedback">{{ $errors->first('last_name') }}</div>
@else
{{-- HTMLのエラーメッセージ --}}
<div class="invalid-feedback">必須項目です</div>
@endif
</div>
<div class="col-md-6 mb-3">
<label for="firstName">名前</label>
<input type="text" name="first_name" value="{{ old('first_name') }}" class="form-control @if($errors->has('first_name')) is-invalid @endif" id="firstName" placeholder="名前" required>
@if($errors->has('first_name'))
<div class="invalid-feedback">{{ $errors->first('first_name') }}</div>
@else
<div class="invalid-feedback">必須項目です</div>
@endif
</div>
</div>
<!--/氏名-->
Git Hubにプッシュ
ローカルで制作したファイルをGitHubのリポジトリにプッシュします。
$ git add --all
$ git commit -m "Add mail form"
$ git push
レンタルサーバーからプル
さくらのレンタルサーバにSSHでアクセス。
GitHubのリモートリポジトリのデータを git pull
で取り入れます。
Gitのコマンドが厳しい方は以下をご参照ください。
動作確認
スパムメールとして悪用されることに心配な方は、ベーシック認証などかけるのもいいかもしれません。
実際にフォームからメールが届けばOKです。
以上です。
さくらのレンタルサーバ スタンダード
当サイトで実演 & 解説している Laravel のプログラムは「さくらのレンタルサーバー」の「スタンダード」プランの環境を前提にして解説しています。非常にコスパがよく利用者からも評価が高いサーバーです。もし、当サイトで解説している Laravel のチュートリアルを同じ環境で試して動かしてみたい方はおススメのサーバーです。
Laravelプログラマーの初心者が選ぶ学習用サーバーとは?
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。