閲覧総計:2568  (本日:1  昨日:0)

CakePHPの入門者トレーニングとして、gihyo.jpサイトの「CakePHPで高速Webアプリ開発」
がすばらしい。しかし、このサンプル例題はCakePHP1.1で解説されている為、CakePHP1.2
では少し異なるコード表現になりそうな所がある。
サンプル例題「ToDoアプリ」をCakePHP1.2でトレースしてみた。 09/01/01

【目次】(項目をクリックすると、そこに飛べます)


入力フォームを作る

(原典)http://gihyo.jp/dev/serial/01/cakephp/0006?page=1

/cake/app/view/index.ctpに入力フォームのコードを追加します。

<form action="<?php echo h($html->url('/tasks/add')) ?>" method="post" style="margin-bottom:1em">
<p><?php echo $form->input('Task.content', array('type'=>"text", 'label'=>"")) ?>
<?php echo $form->submit('タスクを追加') ?></p>
</form>

<table>
  <tr>
    <th>Id</th>
    <th>タスク内容</th>
    <th>状態</th>
    <th>作成日</th>
  </tr>
  <?php foreach ($tasks as $task) { ?>
    <tr>
      <td><?php echo h($task['Task']['id']) ?></td>
      <td><?php echo h($task['Task']['content']) ?></td>
      <td><?php echo h($task['Task']['status']) ?></td>
      <td><?php echo h($task['Task']['created']) ?></td>
    </tr>
  <?php } ?>
</table>

●CakePHP1.2では、入力フォーム回りの書式が変わりました。
Formヘルパーが新設され、inputメソッド他がHtmlヘルパーからFormヘルパーへ移動し
書式も変更となってます。
配列の要素表現も「Task/content」から「Task.content」へ変更になってます。

<1.1書式>

<form action="<?php echo h($html->url('/tasks/add')) ?>" method="post" style="margin-bottom:1em">
<p><?php echo $html->input('Task/content') ?>
<?php echo $html->submit('タスクを追加') ?></p>
</form>

<1.2書式>

<form action="<?php echo h($html->url('/tasks/add')) ?>" method="post" style="margin-bottom:1em">
<p><?php echo $form->input('Task.content', array('type'=>"text", 'label'=>"")) ?>
<?php echo $form->submit('タスクを追加') ?></p>
</form>

●CakePHP1.2からはFormヘルパーの<form>タグ回りの機能が強化され以下の表現で書ける
ようになりました。以前の欠点の</form>タグを発行するメソッドがなかった件も、
endメソッドが新設され解決してます。

(参考)<1.2書式>

<?php
  echo $form->create('Task', array('type'=>"post", 'style'=>"margin-bottom:1em"));
  echo $form->input('content', array('type'=>"text"));
  echo $form->end('タスクを追加');
?>

http://localhost/cake/tasks/にアクセスした画面
LH_cake_tasks_index入力追加画面.JPG

addアクションを追加する

(原典)http://gihyo.jp/dev/serial/01/cakephp/0006?page=2

controllerにaddアクションを追加します。

/cake/app/controllers/tasks_controller.php

<?php
// app/controllers/tasks_controller.php
class TasksController extends AppController { //AppControllerを継承
  var $name = 'Tasks'; //controller名を定義(頭が大文字を覚える)
  var $uses = array('Task'); //使用するmodel名を定義
  
  function index() { //indexアクションの定義
    $this->set('tasks', $this->Task->find('all', array('order'=>'Task.created ASC')));
    //モデルTaskのデータ全てを変数tasksに格納しビューに渡す
  }

  function add() {
    if (!empty($this->data)) { //モデルへの値が渡されてきているかチェック
      if ($this->Task->save($this->data, true, array('content', 'created', 'modified'))) {
        //DBへのレコード追加、saveの第3引数でホワイトリスト設定をした
        $this->flash('タスクが追加されました', '/tasks');
        //flashで簡易な完了メッセージ表示
        return;
      }
    }
    $this->redirect('/tasks'); //$this->dataに値がないか,saveに失敗したときはtasksへリダイレクト
  }

}

タスクを追加してみよう

●タスク内容を入力して,タスクに追加ボタンを押す
LH_cake_tasksデータ入力画面.JPG

●完了メッセージが表示されるので,メッセージ上のリンクを辿る
LH_cake_tasks保存完了メッセージ画面.JPG
●タスクが追加された
LH_cake_tasksデータ入力確認画面.JPG


選択肢 投票
参考になった 10  
ふつう 1  
参考にならなかった 0  

添付ファイル: fileLH_cake_tasksデータ入力確認画面.JPG 590件 [詳細] fileLH_cake_tasks保存完了メッセージ画面.JPG 545件 [詳細] fileLH_cake_tasksデータ入力画面.JPG 606件 [詳細] fileLH_cake_tasks_index入力追加画面.JPG 591件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-07-03 (金) 01:33:12 (1387d)