超訳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に、データの準備をする。(これをクリエイトという)
もしリクエストされたデータが保存されたなら、
    '保存されたよ'と通知する
    インデックスに戻る
保存されなければ、
  '失敗したよ'と通知する。

投稿を検証する。 

addのビューを作ろう
<!-- File: /app/View/Posts/add.ctp -->

<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');
?>
createで準備。
記事の内容を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>
検証はモデルに記述する。app\model\post.phpに太線を追加する。

<?php
class Post extends AppModel {
    public $validate = array(
        'title' => array(
            'rule' => 'notEmpty'
        ),
        'body' => array(
            'rule' => 'notEmpty'
        )
    );
}
ココでは空欄を禁止している。

さてここまで完了したら、posts/index/にブラウザからアクセスしてみよう。
Add Postが追加されて、投稿したら以下のようになる。


保存されたよ.

Blog posts

Add Post
IdTitleCreated
1ゆるふわ☆エンジニアリング2013-04-13 22:46:31
2PenguinWorks2013-04-13 22:46:31
3てすとだよーん2013-04-17 10:29:12


この記事でやったこと:

  • コントローラから記事を追加した
次回は編集だ