CakePHP - 登録機能を作成してみた

2010年04月22日

前回に引き続き、登録機能を作成してみます。

登録機能の作成

  • コントローラの編集
  • users_controller.phpにaddアクションとaddアクションを追加します。
    「data」がフォームの値です。CakePHPのフォームヘルパーを利用すると、name属性が「data」になります。save()関数でDBに登録を行います。

<?php
class UsersController extends AppController
{
    var $name = 'Users';
    function index() {
        $this->set('users', $this->User->find('all'));
    }

    function view($id) {
        $this->User->id = $id;
        $this->set('user', $this->User->read());
    }

    function add() {
        if (!empty($this->data)) {
            if ($this->User->save($this->data)) {
                $this->flash('ユーザの登録が完了しました。','/users/index');
                return;
            }
        }
    }
}

flash()関数は、ユーザに1秒間メッセージを表示してから、他のURLの画面を表示させます。正し、DEBUGが1以上の場合は他のURLに遷移しないので、app/config/core.php内以下の部分を0に変更してください。

Configure::write('debug', 2);
  • ビューの作成
  • app/veiws/にadd.ctpというファイルを作成します。

<h1>ユーザ一登録</h1>
<form id="UserAddForm" method="post" action="/cake/users/add">
<fieldset style="display:none;"><input type="hidden" name="_method" value="POST" /></fieldset>
<p>
<label for="UserName">名前</label>
<input name="data[User][name]" type="text" size="10" value="" id="UserName" />
</p>

<label for="UserAge">年齢</label><input name="data[User][age]" type="text" size="10" value="" id="UserAge" />
<div class="submit"><input type="submit" name="submit" value="登録" /></div></form>
<p><a href="/cake/users/">戻る</a></p>

フォームを全てヘルパーを利用し、作成しました。上記の場合以下のHTMLが生成されます。

<h1>ユーザ一登録</h1>
<form id="UserAddForm" method="post" action="/cake/users/add">
<fieldset style="display:none;">
<input type="hidden" name="_method" value="POST" /></fieldset>
<label for="UserName">名前</label>
<input name="data[User][name]" type="text" size="10" value="" id="UserName" />
<label for="UserAge">年齢</label>
<input name="data[User][age]" type="text" size="10" value="" id="UserAge" />
<div class="submit"><input type="submit" name="submit" value="登録" /></div>
</form>
<p><a href="/cake/users/">戻る</a></p>

以下、画面が表示されます。

WS000060.JPG

テキストフィールドのサイズを指定いますが、長さが変わりません・・・。とりあrず完了とします。

pageTop
>