A Django site.
7月 24, 2008
» CodeIgniter のモデル

CodeIgniter のビューの続き。
モデルについて。

モデルクラスは application/models/ フォルダに以下に置く。
モデルの定義は以下のような感じ。

ファイル: application/models/blog_model.php

<?php
class Blog_model extends Model {
  ...
}
?>

モデルを使用するには以下のようにコントローラで「$this->load->model(’Blog_model’);
」とか明示的に書く必要がある。

ファイル: application/controllers/blog.php

<?php
class Blog extends Controller {

  function index()
  {
    $this->load->model('Blog_model');
    ...
  }
  ...
}
?>

(上の例は微妙かも。コンストラクタに書いとけばいい気も。)

こうすると「$this->Blog_model」ってな感じでモデルにアクセスできるようになる。
でもこれだけじゃまだDBには繋がらない。
DBに接続するには以下のファイルを編集して「自動接続」を有効にする必要がある。

ファイル: application/config/autoload.php

$autoload['libraries'] = array('database');

↑「$autoload[’libraries’]」に「’database’」を追加してる。

あと、DB に接続するための設定も当然必要で、それは以下のファイルに記述する。

application/config/database.php

デフォルトでMySQLの設定が書いてあったので今回はMySQLを使うことに。
(SQLiteでやりたかったけど、そのための情報をすぐに見つけられなかったのでやめた。)

とりあえずMySQLに以下のようなテーブルを作った。

CREATE TABLE `ci`.`blogs` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `title` VARCHAR( 255 ) NOT NULL ,
  `content` TEXT NOT NULL
) ENGINE = InnoDB

テストデータ:

INSERT INTO `ci`.`blogs` (
  `title` ,
  `content`
)
VALUES (
'テスト', 'テストですよー'
);

んで、コントローラを以下のようにすると画面にテーブルの内容が出てくる。

ファイル: application/controllers/blog.php

<?php
class Blog extends Controller {

  function index()
  {
    $this->load->model('Blog_model');

    $blogs = $this->Blog_model->db->get('blogs', 10)->result();

    var_dump($blogs);
  }
}
?>

スクリーンショット:

やったー。

ま、でも、var_dumpしただけで喜んでちゃいけない。
DB周りをもうちょっと突っ込んで調べないと。

参考:
CodeIgniter ユーザガイド 日本語版 : モデル
(前回と前々回の記事は若干古いドキュメントを参照していた。。)

ていうか、最近のフレームワークってどれもRailsっぽく見えてしまうなぁ。

CodeIgniter はドキュメントが丁寧に書かれていて(かつ日本語訳もされていて)非常に助かるなぁ。
ドキュメント重要ですねー。

追記:
えーっと、実は上記のモデル(Blog_model)の使用例はあんまり適切じゃないんですよねー。
なんでかっていうと、本来 blog テーブルからデータを取ってくる云々っていうのは Blog_model の内部でやるべきなんです。
それをコントローラー側でやってて、なんかモデルの意味無い!みたいな感じに上記の例ではなってます。
というわけでもうちょっと勉強します。

追記:
よくよく考えると、上の例の blogs テーブルとか blog_model とかっていうネーミングは変だ。
entries とか entry_model だよね普通。

7月 23, 2008
» CodeIgniter のビュー

CodeIgniter のコントローラの続き。

CodeIgniter のビューについて。
ビューを使うにはコントローラで以下のように書く。

<?php
class Blog extends Controller {

    function index()
    {
        $this->load->view('view');
    }
}
?>

こうすると、application/views/view.php というファイルがビューとして使われる。
ビューは普通のPHPファイル。
テンプレートエンジンを使ったりもできるみたいだけど、そのへんはまだよく知らない。
追記: ↑ただの思い込みな気がしてきたので消しとく。あとで調べる。

ビューへのデータの受け渡しは以下のようにする。

<?php
class Blog extends Controller {

    function index()
    {
        $data = array(
                'title' => 'Title',
                'message' => 'Hello World!'
        );
        $this->load->view('view', $data);
    }
}
?>

そして、ビュー側でデータを表示するには以下のようにする。

ファイル: view.php

<html>
<head>
<title><?php echo $title;?></title>
</head>
	<p><?php echo $message;?></p>
</html>

実に簡単ですねぇ。

参考:
CodeIgniter ユーザガイド 日本語版 - ビュー

7月 22, 2008
» CodeIgniter のコントローラ

CodeIgniter っていうPHPのフレームワークを今調べてるんだけど、なんだかRailsっぽい。

たとえば、コントローラ(MVCの)として以下のようなファイルを作る。

ファイル: blog.php

<?php
class Blog extends Controller {

    function index()
    {
        echo 'Hello World!';
    }

    function hoge()
    {
        echo 'hoge';
    }
}
?>

すると、URLとコントローラのメソッドが以下のようにマッピングされる。

www.your-site.com/blog/ もしくは
www.your-site.com/blog/index
↓
Blog#index() が呼ばれる
www.your-site.com/blog/hoge
↓
Blog#hoge() が呼ばれる

あと、Railsでは何もしなければ呼び出されたメソッドと同じ名前のビュー(index.html.erb、hoge.html.erb)が自動的に適用されるんだけど、CodeIgniterでは明示的に指定してやる必要があるみたい。
そのへんは明日調べる。

参考:
CodeIgniter ユーザガイド 日本語版 - コントローラー