dari88's diary

これから趣味にするプログラミング/PHP/javascript/kohana/CMS/web design/

kohanaのテスト2・・・データベースを読む練習

kohana のテストその2はデータベースの読み込みです。この例題では CMS(Content Management System)のコンセプトである MVC(Model View Controller)をひと通り使っています。また、ビューにビューを入れ子にしている点も見て下さい。コードを読んでいくと結構シンプルな構造であることが理解できるとおもいます。

<手順>
phpMyAdmin で、データベース kohana に次の SQL 文を食わせてテーブルを作る。

# This is a fix for InnoDB in MySQL >= 4.1.x
# It "suspends judgement" for fkey relationships until are tables are set.
SET FOREIGN_KEY_CHECKS = 0;

#-----------------------------------------------------------------------------
#-- test2
#-----------------------------------------------------------------------------

DROP TABLE IF EXISTS `test2`;

CREATE TABLE `test2`
(
        `id` INTEGER  NOT NULL AUTO_INCREMENT,
        `name` VARCHAR(30)  NOT NULL,
        `address` VARCHAR(30),
        `tel` VARCHAR(30),
        PRIMARY KEY (`id`)
) ENGINE=InnoDB CHARACTER SET 'utf8';

INSERT INTO test2 VALUES ('1', '山田花子', '東京都港区南青山', '99-9999-9999');
INSERT INTO test2 VALUES ('2', '佐藤一郎', '東京都杉並区高円寺','88-8888-8888');
INSERT INTO test2 VALUES ('3', '大阪太郎', '大阪府大阪市北区梅田', '77-7777-7777');

・application/classes/controller/test2

<?php defined('SYSPATH') OR die('No direct access allowed.');

// コントローラ
class Controller_Test2 extends Controller {

    public function action_index() {
        // モデル
        $dat = new Model_Test2;
        $result = $dat->Getdata();
        
        // ビュー
        $view = new View('test2'); // テンプレートtest2をビューにセット
        $view->message = "データベースの読み込みテストです"; // 変数$messageをセット
        $view->content = new View('test2table'); // 変数$contentにビューを入れ子にする
        $view->content->data = $result; // テンプレートtest2tableの$dataにモデルの結果を代入する
        $this->response->body($view); // ビューを表示する
    }

}

?>

・application/classes/model/test2

<?php defined('SYSPATH') or die('No direct script access.');

class Model_Test2 extends Model_Database {

    public function __construct() {
        parent::__construct();
    }

    public function getData() {
        $sql = "select id,name,address,tel from test2 order by id ASC";
        $result = $this->_db->query(Database::SELECT, $sql, true);
        return $result;
    }

}

?>

・application/views/test2.php

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>kohanaのテスト2</title>
                <style type="text/css">
                        body {font -family: Msgothic;}
                        h1 {font-style: italic;}
                </style>
    </head>
    <body>
                <h1><?php echo $content ?></h1>
                <p><?php echo $message ?></p>
    </body>
</html>

・application/views/test2table.php

<html>
    <body>
        <table border="1"><tr>
                <?PHP
                foreach ($data as $d) {
                    print "<tr><td>$d->id </td> <td>$d->name </td>
<td>
$d->address</td><td>$d->tel</td></tr>"; } ?> </tr></table> </body> </html>

・ブラウザで localhost/test2 にアクセスする。

 これでデータベースのデータの一覧表が表示されます。モデルの書き方はもっといろいろあるようです。