さて、それでは新規登録ページを作成していきましょう。
現状表示されているのは、scaffoldにより生成された仮のものです。
ここから、あなた好みにカスタマイズしてください。
まずは、新規登録ページのビューであるcreate.ctpを作成します。
説明が遅れましたが、CakePHPではビューの拡張子はctpになります。
<form action="<?php echo $this->Html->url('/Tasks/create'); ?>" method="POST"> タスク名<input type="text" name="name" size="40"> <input type="submit" value="タスクを作成"> </form>
<form action="<?php echo $this->Html->url('/Tasks/create'); ?>" method="POST"> タスク名<input type="text" name="name" size="40"> <input type="submit" value="タスクを作成"> </form>
formタグのaction属性の中に Htmlヘルパー を使用しており、読みにくいかもしれません。
この$this->Html->url()は、メソッド名の通り、URLを出力してくれます。
わざわざURLを調べてコピペする必要はありませんね。
この場合、Tasksコントローラーのcreateメソッドを呼ぶ、ということになります。
Htmlヘルパーは使わなくても良いのですが、便利なものも多いので、機会があれば調べてみてください。
CakePHP公式ドキュメント -HTMLヘルパー-
createアクションをコントローラーに実装
// app/Controller/TasksController.php // 省略 public function create() { // POSTされた場合のみ処理を行う if($this->request->is('post')) { ] $data = array( // 渡ってきたデータの中からnameという名前のついた値を取り出す 'name' => $this->request->data['name'] ); // データを登録 $id = $this->Task->save($data); $msg = sprintf('タスク %s を登録しました。', $this->Task->id); // メッセージを表示してリダイレクト $this->Flash->set($msg); $this->redirect(['controller'=>'tasks','action'=>'index']); return; } // POSTされたデータがなければ普通にcreate.ctpを表示 $this->render('create'); } // 省略
多くは前項でも使ったメソッドであるため割愛します。
前項と違うところは、saveFieldではなく、saveでDBに登録することです。
saveFieldは一つのカラムに対して影響を与えることができますが、複数のカラムに影響を与える場合や、INSERTする場合にはsaveメソッドを使用します。
CakePHP公式ドキュメント -データを保存する-
$msg = sprintf(‘タスク %s を登録しました。’, $this->Task->id);
上記のsprintfの引数で渡している$this->Task->idですが、これは「 このコントローラーはTaskモデルに対し、今保存したレコードのidを取得するよう指示している 」ということです。
POSTされたデータがなかったら、つまり、 普通に新規登録ページにアクセスしてきたら 、上記の保存処理は行わずにビューを表示します。
これにて新規登録ページは完成です。