altere5's blog

I thought what I'd do was, I'd pretend I was one of those deaf-mutes. ( or shou'd i ? )

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/」へアクセスする。

f:id:altere5:20131116024220p:plain

これで入力フォームは表示された。

(2) 入力内容の受取とメッセージの表示

次に入力フォームで入力された内容を受け取りメッセージを表示する。
今の状態のまま「送信ボタン」を押すと・・・

f:id:altere5:20131116025401p:plain

当然エラーになる。理由は「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」フォルダ内に配置。

それでは実際に動作を確認する。

まずは普通に動作させた場合。

f:id:altere5:20131116031337p:plain

f:id:altere5:20131116031432p:plain

入力フォームの「お名前」欄に入力されたものが「thanks」ビューで表示されている。

次にPOSTメソッドにより送信が行われなかった場合。
今回は直接「http://localhost/contacts/thanks」にアクセスする。

f:id:altere5:20131116024220p:plain

分かりにくいが自動的に「http://localhost/contacts/index」にリダイレクトされている。

取りあえず非常にシンプルな形でCakePHPを触ってみた。
ただ、このままだと当然沢山の問題を抱えているので次回はこれをベースに手直しをしながらさらにお勉強をしてみる予定。