CakePHPで高速Webアプリ開発

第6回 CakePHPで作るToDoアプリ(2)

この記事を読むのに必要な時間:およそ 3.5 分

input要素

<p><?php echo $html->input('Task/content', array('size' => '40')) ?>

HTMLヘルパーのinputメソッドは,type="text"なinput要素,いわゆる「1行テキスト入力フォーム」を返すメソッドです。第一引数には,対象となるモデルとカラムを「モデル名/カラム名」でフォーマットして渡します。第二引数には連想配列でinput要素の属性と値を渡します。この例では size="40" となるように書かれています。これに加えてvalue属性の値を固定したければ,array('size' => '40', 'value' => 'デフォルト値') といったように連想配列の要素を次々に記述することで設定を加えることができます。

ここで先ほどform要素ではWYSIWYGエディタに配慮してacton属性のみをHTMLヘルパーで記述したこととの矛盾を感じたかもしれません。その感覚は確かにその通りで,input要素が完全にPHPコードに置き換えられているため,この例ではWYSIWYGエディタ上には入力フォームが表示されません。ただしform要素に比べて問題としては軽微といえます。input要素は置換要素であるため,表示されないだけでレイアウト上大きな問題となりにくいからです。

しかし表示されないことに変わりはなく,場合によってはinput要素はそのまま記述してもよいでしょう。その際にはname属性のフォーマットを「data[モデル名][カラム名](大括弧も記述⁠⁠」として記述する必要があります。

さらに注意点として,inputメソッドで記述できるinput要素のname属性には制限があります。どのような制限かといいますと,第一引数のフォーマットは必ず「モデル名/カラム名」である必要があります。このフォーマットを外れるとWarningエラーが出力され,正しく動作しません。

このため,モデルに関連しないパラメータを受け取るためにinputメソッドを使うと,フォーマットに沿うためだけに存在しないモデル名やカラム名をむりやり記述することになってしまいます。一応動作はしますが,混乱を招く原因となり得るため,あまりお勧めできません。

無用な混乱を避けるため,モデルに関連しないパラメータについてはinput要素はそのままHTMLで記述することをおすすめします。コントローラ側では $this->params['form']を参照してください。$_POSTと同じ構造で値が格納されています。

submitボタン

<?php echo $html->submit('タスクを追加') ?></p>

HTMLヘルパーのsubmitメソッドは,type="submit"なinput要素,いわゆる「送信ボタン」のHTMLを返すメソッドです。第一引数にはボタン名となるvalue属性の値を渡します。この部分もWYISIWYGエディタに配慮してHTMLで書いてしまっても差し支えありません。

完成した入力フォーム

図1のような画面が表示されたら,入力フォームの追加は完了です。

図1 入力フォームが追加された画面

図1 入力フォームが追加された画面

コントローラにaddアクションを追加する

tasksコントローラのaddアクションとして,フォームから送られてきたデータを追加する機能を実装します。リスト2の赤字の部分が追記されたコードになります。

リスト2 app/controllers/tasks_controller.php

<?php
class TasksController extends AppController {
  var $name = 'Tasks';
  var $uses = array('Task');
  function index() {
    $this->set('tasks', $this->Task->findAll(null, null, 'Task.created ASC'));
  }
function add() {
    if (!empty($this->data)) {
      if ($this->Task->save($this->data, true, array('content', 'created', 'modified'))) {
        $this->flash('タスクが追加されました', '/tasks');
        return;
      }
    }
    $this->redirect('/tasks');
  }
}

著者プロフィール

秋田真宏(あきたまさひろ)

株式会社ロケットスタート エンジニア。個人ブログは「akiyan.com」。1981年生まれ。

URLhttp://www.akiyan.com/

著書