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; ?>