たとえば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しないようにだけど、他にいい方法があるかなぁ。