CakePHP2で簡単なコンタクトフォームをつくります。
- メール送信にCakeEmailを使用。
- バリデーション用にContactモデルを作成。
- 確認画面を挟む。
今回作成するファイル
app/
|-- Config/
| `-- email.php
|-- Controller/
| `-- ContactController.php
|-- Model/
| `-- Contact.php
|-- View/
| |-- Contact/
| | `-- ContactController.php
| |-- Emails/
| | `-- text/
| | `-- contact.ctp
| `-- Emails/
| `-- text/
| `-- contact.ctp
`-- Layouts/
`-- Emails/
`-- text/
`-- contact.ctp
メールの設定
/Config/email.php.defaultを/Config/email.phpとリネームし、基本設定を書いていきます。コントローラー側でも追記できますが、可能な限りここで定義しておきます。Gmailなど外部のメールサーバーも使用できます。
モデル
今回、データベースにcontactsテーブルは作っていませんが、バリデーションで使用するためにContactモデルを用意します。
- バリデーション名が変更
空文字のバリデーション名がCakePHP2.7からnotBlankとなっています。2.7未満ではnotEmptyに変更してください。
ビュー
フォーム画面(入出力)のビューと、メールテンプレート用のビューを書いていきます。
フォーム入力画面
バリデーションのエラー表示をしたいので、容易にできるFormヘルパーを使用しています。
フォーム確認画面
送信データをhiddenへ。
メール本文の表示
メール本文表示用のビューを書きます。コントローラー $email->viewVars($content)
でセットされます。
メールレイアウト
コントローラー
まずはフォームから受け取ったデータをバリデーション。エラーが無ければ確認ページを表示。その後、送信ボタンをクリックでメール送信処理をします。確認画面、送信処理前の両方でバリデーションしているのは改変対策のためです。
以上で簡単なコンタクトフォームができました。
おわりに
今回は使用しませんでしたが、セキュリティコンポーネントを使って改変対策やワンタイムトークンを追加したほうが安全です。また、IPやユーザーエージェントなども取得しておくとイタズラ対策にもなります。