CodeIgniterのテンプレート作成手順

たとえばtodoという名前のアプリを作る。

1.htdocsルートにapplicationとsystemフォルダを置いてしまう。

2.applicationフォルダの内容を、todoサブディレクトリ作って全部中に移動。

3.todoディレクトリをリネームして大量に複製しておく(別アプリ用)。

4.index.phpをコピーしてtodo.phpにリネーム。これも作りたいアプリの数だけ作る。

5.それぞれのphpの$application_folderを’application/todo’とかに変えておく。

ここまでで、systemを複数アプリで共有できるようになる。

次、基本設定。

1.database.phpとconfig.phpをコピーして、database.php.exampleとconfig.php.exampleを作っておく。database.phpとconfig.phpはサーバとローカルで内容が異なるので、デプロイ対象にしない(これはもっといい方法があるかも)

2.DB設定を済ませる。

3.autoload.phpにdatabaseを設定しておく。database使わないWebアプリなんてめったにないし。

4.sqlのコンソールで、DBとテーブルを作っておく。ついでにサンプルデータも何行か入れておくと確認が早い。

こんなもんか。

次、コントローラいじって簡単なアプリを作って動作確認。welcome.phpを適当に書き換えていく。

コンストラクタ。使いそうなモジュールを適当にロード

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

    //ここにロードしたいモジュールを記述
    $this->load->helper('url');
    $this->load->helper('form');
    $this->load->helper('cookie');
    $this->load->library('pagination');

}

次indexメソッド。

//一覧表示
public function index()
{
    //デバッグを行うには、下記をコメントアウトして下さい。
    //$this->output->enable_profiler(TRUE);
    $limit = 20;
    $offset = 0;

    //DBより読み込み
    $this->db->order_by("id", "desc");
    $query = $this->db->get('todo', $limit, $offset);
    $data['result'] = $query->result();

    //VIEWに入れて表示
    $this->load->view("todo_list", $data);

    $this->db->close();
}

削除。

//削除
public function remove($id){
    $this->db->where('id', $id);
    $this->db->delete('todo');
    redirect('/');
}

登録。

//登録
public function add() {
    $input_data = $this->input->post('todo');

    $data_array = array(
        'data' => $input_data
    );

    $this->db->insert('todo', $data_array);
    $last_id = $this->db->insert_id();

    redirect('/');
}

あとはviewを作る。これはtodo_list.php

<!DOCTYPE HTML>
<html lang="ja-JP">
<head>
    <meta charset="UTF-8">
    <title>Todo</title>
</head>
<body>
<form action="<?php echo site_url(); ?>/welcome/add" method="POST">
    <input type="input" name="todo">
</form>
<ul>
<?php foreach ($result as $item): ?>
    <li><?php echo $item->data; ?> <a href="<?php echo site_url().'/welcome/remove/'.$item->id; ?>">x</a></li>※→この行XSSあり
<?php endforeach; ?>
</ul>
</body>
</html>

これで一行掲示板的なのできた。

あっ、XSS対策。

<li><?php echo htmlspecialchars($item->data); ?> <a href="<?php echo site_url().'/welcome/remove/'.$item->id; ?>">x</a></li>

※をこれに修正しておく。XSSは出口で防ぐのが基本らしいので、VIEW側で対策をする。

ここから認証を入れるなら、TankAuthかIonAuthを使うといいと思う。一般的なメール認証が出来るようになる。ただ、本命はTwitter経由のOAuthだろうなー。このあたりも、実現できたらしようと思う。パスワード持たなくて済むなら、個人サービスとしてはその方がいいやね。

あとは、BitBucketとかGitHubに公開出来るなら、非常に今時だとおもう。database.php.exampleを作ったのは、パスワードを間違ってpushしないようにだけど、他にいい方法があるかなぁ。