nigoblog

技術系会社のCEOブログ~私的編~

ウェブイチをcodeigniterで実装する-第一回-

CodeIgniter徹底入門

CodeIgniter徹底入門


前回のブログレコメンドアルゴリズム超入門 - nigoblogでウェブイチウェブイチ
のβ版を作ったと報告しました。

今回はそのウェブイチをcodeigniterで実装し直すまでを報告します。

  1. codeigniterとは?
  2. codeigniter Assetファイルの置き場
  3. データベースの設定
  4. オートロードの設定
  5. コントローラーの実装
  6. モデルの実装
  7. ビューの実装

以上の流れで説明します。
ちなみに第一回とありますが、もしかして今後連載するかもしれないので一応つけときました。

codeigniterとは?

概要

訳すと「コードに火をつけろ!!」
かっこいいすね(若干違うけど)
簡単にいうとフレームワーク
ただし軽量
一般的にwebのフレームワークというとcakePHPRuby on Railsなんかがイメージにあるかと思いますが、基本それと同じです。
ただし、上の2つと比較してめちゃくちゃ軽い!!
もともとのファイルが少なく、自由度が高いというのが特徴です。
命名規則なんかは厳密ではないのですが、上記2つに習って名付ければあまり不便ではないかと。
というわけで軽いというのが魅力のcodeigniter

ダウンロード

このリンクからダウンロードできます。トップ :: 日本CodeIgniterユーザ会
ここはさらにユーザーズガイドなども乗っておりその充実さも魅力の一つ!
ダウンロードしたファイルを今回はMAMPでテストするのでhtdocs以下にダウンロードしたファイルを置きます。この辺はそれぞれ開発環境があると思うのではしょります。いつか開発環境についても言及したいと思います。
すると次のような構成になります。今回webichiの場合

htdocs/
    webichi/
        application/
        system/
        user_guide/
        user_guide_ja/

主にapplication/ の中身を色々いじっていきます。
他にもありますがとりあえずこれだけ、次はcss, img, jsなどのAssetファイルの置き場についてです。

codeigniter Assetファイルの置き場

css, img, jsはそれぞれこのように配置します

htdocs/
    webichi/
        application/
        css/
        img/
        js/
        system/
        user_guide/
        user_guide_ja/

これだけ!!よく置き場がどこかわからないというので、ポイントです。ビューからアクセスする方法は後に説明します。

データベースの設定

次はデータベースの設定です。まずapplication以下は次のようになります。

application/
    cache/
    config/
    core/
    controllers/
    errors/
    helpers/
    hooks/
    libraries/
    languages/
    logs/
    models/
    views/
    third_party/

色々ありますが、まずはconfigから。
configの中にdatabase.phpがあります。
それは次のようになっています。
config/database.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$active_group = 'default';
$active_record = TRUE;

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = '';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

このファイルの username, password, database を指定することでデータベースに接続ができます。

オートロードの設定

次もconfig以下にあるautoload.phpをみていきます。
config/autoload.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$autoload['packages'] = array();

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

$autoload['helper'] = array();

$autoload['config'] = array();

$autoload['language'] = array();

$autoload['model'] = array('item_model');

例によってコメントは消しています。まずlibrariesを書き換え、ここにdatabaseとすることでデータベースと接続できます。
オートロードがなければコントローラやモデルでライブラリを使うたびにロードしなければいけませんが、オートロードを使えばいちいちそれをする必要がありません。model のところは後に説明します。

コントローラーの実装

実装の前に簡単にMVCモデルですが、基本的にMVCそれぞれのディレクトリの中には
データベースのテーブルに対応するファイル(ビューならディレクトリ)
を作成します。今回使うデータベースは
items
users
likes
とあるのでMVCそれぞれ一つづつ作成します。今回はとりあえずトップページのみ作成ということでitemsのMVCを作成します。
まずファイル名は
item.php
としました。cakeだと色々怒られそうな名前ですが…
それでは実装ファイルを載せます
contollers/item.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Item extends CI_Controller {
	
	public function index()
	{
		$this->load->model('item_model', 'items');
		$data['items'] = $this->items->get_items();
		$this->load->view('items/index', $data);
	}
}

cakeやrailsをやったことがあれば簡単にわかると思いますが、一応説明します。
itemクラスにそれぞれのビューに対応するメソッドを作成します。今回はトップページだけなのでindex()のみ
最初にモデルを読み込みます。さっきオートロードでやったのにと思いますが、読み込みます。
まずモデルのファイル名、次にそのメソッド内で使う変数名を記述します。
次に配列に代入するようにitem_model内のメソッドget_items()の結果を読み込みます。
最後に対応するviewをロードします。変数をviewメソッドの引数に追加するとそのviewで変数がつかえます。

モデルの実装

次のようになります。
models/item_model.php

<?php

	class Item_model extends CI_Model{
		
		function __construct(){
			parent::__construct();
		}
		
		function get_items(){
			$query = $this->db->order_by('id', 'random');
			$query = $this->db->get('items', 10);
			return $query->result();
		}
	}

モデルクラスを作ります。これもcakeやrailsをやっていればわかると思います。
このモデルを呼び出すと使えるメソッドを書いていきます。
get_items()はテーブルitem内にある要素をランダムに呼び出し、返すというメソッドとなります。(コードを読んで直感的にわかるのもcodeigniterのいいところ)

ビューの実装

これは長くなるので要点だけ説明します。
まずcssなどは

<link rel="stylesheet"  href="../css/bootstrap.css" >

のように呼びます。
次に変数は

<?php print_r($items); ?>

のように呼びます。
つまりコントローラーの引数で配列を渡し、その配列の引数が変数名となります。(文字だとゴチャゴチャ)
これくらいでしょうか。
あとは普通にforeachなども使えます。

以上で説明を終わります。
codeigniterはドキュメントがしっかりしているので習得が用意だと思います。
cakeが重いと思ったら是非試してみては!?

最後に今回作成したファイルはgithubにあげたので是非参考にしてください。
nigohiroki/webichi · GitHub
それでは!