前の記事まででやったこと:
- CakePHPのざっくりとした説明
- CakePHPをダウンロードして、インストールする
- SQLデータベースを作成する
- CakePHPとデータベースを接続する
- データベースのセキュリティを設定する
- 記事のモデルを作成する
- 記事のコントローラを作成する
- 記事のビューを作成する
- 日本語の文字化けを直す
- コントローラを改造して、記事の中身を見えるようにする
この記事でやること:
- コントローラから記事の追加をする
データベースの読み込み、表示ができるようになったね。
今回は書き込みだ。
add関数を作る
PostsControllerに以下の太線を追加しよう。
class PostsController extends AppController {
public $helpers = array('Html', 'Form', 'Session');
public $components = array('Session');
public function index() {
$this->set('posts', $this->Post->find('all'));
}
public function view($id) {
if (!$id) {
throw new NotFoundException(__('Invalid post'));
}
$post = $this->Post->findById($id);
if (!$post) {
throw new NotFoundException(__('Invalid post'));
}
$this->set('post', $post);
}
public function add() {
if ($this->request->is('post')) {
$this->Post->create();
if ($this->Post->save($this->request->data)) {
$this->Session->setFlash('保存されたよ.');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('失敗したよ.');
}
}
}
}
意味:
add関数は、
もしリクエストがPostなら、
Postに、データの準備をする。(これをクリエイトという)
もしリクエストされたデータが保存されたなら、
'保存されたよ'と通知する。
インデックスに戻る
保存されなければ、
'失敗したよ'と通知する。
もしリクエストがPostなら、
Postに、データの準備をする。(これをクリエイトという)
もしリクエストされたデータが保存されたなら、
'保存されたよ'と通知する。
インデックスに戻る
保存されなければ、
'失敗したよ'と通知する。
投稿を検証する。
addのビューを作ろう
<!-- File: /app/View/Posts/add.ctp -->
createで準備。
<h1>Add Post</h1>
<?php
echo $this->Form->create('Post');
echo $this->Form->input('title');
echo $this->Form->input('body', array('rows' => '3'));
echo $this->Form->end('Save Post');
?>
記事の内容をinputして、save post という名前の投稿ボタンを作る。
次はindexにaddボタンを追加する。
<h1>Blog posts</h1>
<?php echo $this->Html->link(
'Add Post',
array('controller' => 'posts', 'action' => 'add')
); ?>
<table>
<tr>
<th>Id</th>
<th>Title</th>
<th>Created</th>
</tr>
<!-- ここから、$posts配列をループして、投稿記事の情報を表示 -->
<?php foreach ($posts as $post): ?>
<tr>
<td><?php echo $post['Post']['id']; ?></td>
<td>
<?php echo $this->Html->link($post['Post']['title'],
array('controller' => 'posts', 'action' => 'view', $post['Post']['id'])); ?>
</td>
<td><?php echo $post['Post']['created']; ?></td>
</tr>
<?php endforeach; ?>
<?php unset($post); ?>
</table>
<?php
class Post extends AppModel {
public $validate = array(
'title' => array(
'rule' => 'notEmpty'
),
'body' => array(
'rule' => 'notEmpty'
)
);
}
さてここまで完了したら、posts/index/にブラウザからアクセスしてみよう。
Add Postが追加されて、投稿したら以下のようになる。
Blog posts
Add PostId | Title | Created |
---|---|---|
1 | ゆるふわ☆エンジニアリング | 2013-04-13 22:46:31 |
2 | PenguinWorks | 2013-04-13 22:46:31 |
3 | てすとだよーん | 2013-04-17 10:29:12 |
この記事でやったこと:
- コントローラから記事を追加した
次回は編集だ