CakePHPのお勉強 1回目 お問い合わせサンプル
取りあえずCakePHPで何か書いてみる。
CakePHPの公式サイトには簡易Blogのようなチュートリアルがある、が、まぁ自分でやってみる。
非常にシンプルなサンプルからということでよくある「お問い合わせ」を作成してみる。
(1) 最初の画面(入力フォーム)を表示する
CakePHPではデフォルトではコントローラ内の「index」アクションが呼び出される。
まずは「ContactsController.php」と「index.ctp」を以下の内容で準備する。
<?php class ContactsController extends AppController { // indexアクション public function index() {} }
<form action="/contacts/thanks" method="POST"> <div class="input text"> <label for="username">お名前</label> <input type="text" name="username" id="username" /> </div> <div class="input text"> <label for="email">メールアドレス</label> <input type="text" name="email" id="email" /> </div> <div class="input text"> <label for="comment">コメント</label> <input type="text" name="comment" id="comment" /> </div> <div class="submit"> <input type="submit" value="確認" /> </div> </form>
「ContactsController.php」は「Controller」フォルダ内に配置。
「index.ctp」は「View」フォルダ内に「Contact」フォルダを作成しその中に配置。
配置を終えたら「http://localhost/contacts/」へアクセスする。
これで入力フォームは表示された。
(2) 入力内容の受取とメッセージの表示
次に入力フォームで入力された内容を受け取りメッセージを表示する。
今の状態のまま「送信ボタン」を押すと・・・
当然エラーになる。理由は「thanks」アクションがコントローラ内に存在しないので。
という事で「thanks」アクションを追加する。
<?php class ContactsController extends AppController { // indexアクション public function index() {} // thanksアクション public function thanks() { if($this->request->is('post')) { //POSTデータを受け取った場合の処理を記述 $this->set('username', $this->request->data['username']); } else { $this->redirect('index'); } } }
まず11行目でPOSTメソッドでデータが送信されているか確認。
POSTメソッドでデータが送信されている場合は、その中の「username」をViewから参照可能なようにセット処理を実施。
一方で、POSTメソッドでデータが送信されていない場合、「index」アクションにリダイレクトしている。
つまりPOSTメソッドでデータが送信されていない場合は初期表示に戻している。
さて、このままでは「thanks」ビューが存在しないのでそれも追加。
<h1><?php echo $username; ?>さま お問い合わせありがとうございました</h1>
「thanks」ビューでは入力フォームから受け渡された「username」を使いお礼を表示。
「thanks.ctp」は「index.ctp」同様に「View/Contact」フォルダ内に配置。
それでは実際に動作を確認する。
まずは普通に動作させた場合。
入力フォームの「お名前」欄に入力されたものが「thanks」ビューで表示されている。
次にPOSTメソッドにより送信が行われなかった場合。
今回は直接「http://localhost/contacts/thanks」にアクセスする。
分かりにくいが自動的に「http://localhost/contacts/index」にリダイレクトされている。
取りあえず非常にシンプルな形でCakePHPを触ってみた。
ただ、このままだと当然沢山の問題を抱えているので次回はこれをベースに手直しをしながらさらにお勉強をしてみる予定。