3. guestbook

バリデータとかいれてないけど。
バリデーションを追加。

DB作成

CREATE DATABASE `guestbook` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

CREATE TABLE IF NOT EXISTS `guests` (
  `id` int(11) NOT NULL auto_increment,
  `name` text collate utf8_unicode_ci,
  `mail` text collate utf8_unicode_ci,
  `contnet` text collate utf8_unicode_ci,
  `url` text collate utf8_unicode_ci,
  `created` timestamp NULL default NULL,
  `updated` timestamp NULL default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

D:/test/cakephp/app/config/database.php を編集

    var $default = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'username',
        'password' => 'password',
        'database' => 'guestbook',
        'prefix' => '',
    );

D:/test/cakephp/app/models/guest.php を作成

<?php

class Guest extends AppModel {
    
    public $name = 'Guest';

    // 追記
    public $validate = array(
        'name' => array(
            'rule' => array('notEmpty'),
        ),
        'mail' => array(
            'notEmpty' => array(
                'rule' => array('notEmpty'),
            ),
            'email' => array(
                'rule' => array('email'),
            ),
        ),
        'content' => array(
            'rule' => array('notEmpty'),
        ),
        'url' => array(
            'notEmpty' => array(
                'rule' => array('notEmpty'),
            ),
            'url' => array(
                'rule' => array('url'),
            ),
        ),
    );
}

D:/test/cakephp/app/controllers/pages_controller.php を作成

<?php

class PagesController extends AppController {

    public $uses = array('Guest');

    public function guestbook()
    {
        if (!empty($this->data['Guest'])) {
            if ($this->Guest->save($this->data)) {
                $this->redirect('/pages/guestbook');
                return;
            }
        }
        
        $guests = $this->Guest->find('all', array(
            'order' => 'created DESC',
        ));
        
        $this->set(compact('guests'));
    }
}

D:/test/cakephp/app/views/pages/guestbook.ctp を作成

<?php echo $form->create('Page', array('url'=>'/pages/guestbook')); ?>
<!-- 変更
<table>
  <tr>
    <td>お名前:<?php echo $form->text('Guest.name'); ?></td>
  </tr>
  <tr>
    <td>メール:<?php echo $form->text('Guest.mail'); ?></td>
  </tr>
  <tr>
    <td>本文:<?php echo $form->textarea('Guest.content'); ?></td>
  </tr>
  <tr>
    <td>URL:<?php echo $form->text('Guest.url'); ?></td>
  </tr>
  <tr>
    <td><?php echo $form->submit('登録'); ?></td>
  </tr>
</table>
-->
<table>
  <tr>
    <td>お名前:
      <?php echo $form->error('Guest.name', 'お名前を入力してください。'); ?>
      <?php echo $form->text('Guest.name'); ?>
    </td>
  </tr>
  <tr>
    <td>メール:
      <?php echo $form->error('Guest.mail', array(
                                'notEmpty' => 'メールを入力してください。',
                                'email' => 'メールアドレスを正しく入力してください。',
                             )); ?>
      <?php echo $form->text('Guest.mail'); ?>
    </td>
  </tr>
  <tr>
    <td>本文:
      <?php echo $form->error('Guest.content', '本文を入力してください。'); ?>
      <?php echo $form->textarea('Guest.content'); ?>
    </td>
  </tr>
  <tr>
    <td>URL:
      <?php echo $form->error('Guest.url', array(
                                'notEmpty' => 'URLを入力してください。',
                                'url' => 'URLを正しく入力してください。',
                             )); ?>
      <?php echo $form->text('Guest.url'); ?>
    </td>
  </tr>
  <tr>
    <td><?php echo $form->submit('登録'); ?></td>
  </tr>
</table>
<?php echo $form->end(); ?>

<?php foreach($guests as $guest): ?>
<table>
  <tr>
    <td>
      <?php echo h($guest['Guest']['content']); ?>
      <br/>
      From: <?php echo h($guest['Guest']['name']); ?>

<?php if(!empty($guest['Guest']['url'])): ?>
      <a href="<?php echo h($guest['Guest']['url']); ?>"><?php echo $html->image('house.gif'); ?></a>
<?php endif; ?>

<?php if(!empty($guest['Guest']['mail'])): ?>
      <a href="mailto:<?php echo h($guest['Guest']['mail']); ?>"><?php echo $html->image('mail.gif'); ?></a>
<?php endif; ?>
      <br/>

	  <?php echo h(date('Y/m/d H:n', strtotime($guest['Guest']['created']))); ?>
    </td>
  </tr>
</table>
<?php endforeach; ?>