CodeIgniterとは
- CodeIgniterはコードイグナイターと読む。
- PHPの軽量フレームワークであり、CakePHPやLaravelと比較して圧倒的なシンプルさが売り
- フレームワークの王様、Railsと違って高機能ではなく、ましてや自動でコード生成とかない。ありえない。
- あくまで「フレーム」であってMVCに沿ったフレームを提供してくれる。
オレオレフレームワークよりはマシ
2.x VS 3
最初安定版の2.x系触ろうとしたけどちょうど3のRC版出たのとライセンス的な問題でせっかくだし3を選んだ
2015年4月14日 3.0.0の正式リリース版が出たようなのでそれ使う
インストール
CodeIgniter-3.0.0 適当にZipで落として解凍
http://*****/index.php
を開いてWelcome to CodeIgniter!って迎えてくれれば成功
Hello Worldしてみる
早速新規ペーシを表示してみる
- application/views/index.phpを作成 HTMLを適当に記述
<html> <head> <title></title> </head> <body> Hoge Hoge </body> </html>
- application/controllers/Home.phpを作成 以下コード
<?php class Home extends CI_Controller { public function index(){ $this->load->view('index'); } }
これでindex.php/homeを開くとindex.phpの内容が表示される
Model
CodeIgniterはMVC設計なのでModelのディレクトリもちゃんとある。
- application/models/テーブル名_model.phpが慣習の模様 必ずしも必須ではないっぽい
- モデルをコントローラーから呼び出しても自動的にDBに接続されるわけではないのでコンストラクタ等で接続しなきゃいけないので注意
- CI_Modelを継承してるので以下のようになる
<?php class Users_model extends CI_Model { public function __construct(){ $this->load->database(); } public function create_user(){ 略 } }
こうすると後述するコントローラーから$this->users_model->create_user();
のようにメソッドを呼び出せる
ModelからDBの操作するにあたってのクエリの出し方は公式ドキュメントが参考になる。
Controller
コントローラーもモデル同様に親コントローラーであるCI_Controllerを継承する。例えばクラス名をFormにしようとしたらapplication/controllers/Form.phpに(ファイル名小文字不可)
<?php class Form extends CI_Controller { public function __construct(){ parent::__construct(); } public function index(){ $this->load->view('site1'); } public function hoge(){ $this->load->view('site2'); } }
上記コードは適当だけど、こうすると
となる。なおコンストラクタを記述しない場合は自動的に親のコンストラクタのみ実行されるので子コンストラクタに特に記述しない場合は省略しても動く。
なお、URLに3つ以上のセグメントが含まれる場合、3番目以降のセグメントはメソッドに引数として渡される。例えばindex.php/users/show/123/だった場合、このように書ける
<?php class Users extends CI_Controller { public function show($id){
バリデーション付フォームを作る
まずは公式ドキュメントを参考に登録フォームを作ってみる
作るにあたってCodeIgniterはバリデーション等の文章を日本語にする必要がある。
$config['language'] = 'japanese';
View
application/views/myform.phpにHTML記述 一件通常のフォームだが<form>
の始まりタグが特殊なのに注意
<html> <head> <title>Form</title> </head> <body> <?php echo validation_errors(); ?> <?php echo form_open('form'); ?> <p>ユーザ名</p> <input type="text" name="username"/> <p>パスワード</p> <input type="password" name="password" /> <p>パスワードの確認</p> <input type="password" name="passconf" /> <p>メールアドレス</p> <input type="text" name="email"/> <div><input type="submit" value="送信" /></div> </form> </body> </html>
それに合わせてフォーム登録後のページを適当にform_success.phpで作成しておく
Model
モデルを作る前にデータベースに接続してテーブルを作成
create table users( id int primary key auto_increment, name varchar(10) not null, password varchar(10) not null, email varchar(100) not null );
CodeIgniterがデータベースに接続できるようにapplication/config/database.phpを設定
最低限
- username
- password
- database
さえ設定しておけばおk
ようやくモデル。application/models/Users_model.phpにて
<?php class Users_model extends CI_Model { public function __construct(){ $this->load->database(); } public function create_user(){ $data = [ 'name' => $this->input->post('username'), 'password' => $this->input->post('password'), 'email' => $this->input->post('email') ]; return $this->db->insert('users', $data); } }
Controller
application/controllers/Form.phpを作成。まずは枠組みから
<?php class Form extends CI_Controller { public function __construct(){ parent::__construct(); $this->load->model('users_model'); } public function index(){ $this->load->view('myform'); } }
コンストラクタでモデルを読み込みのがわかる。これでindex.php/formにアクセスすると
Message: Call to undefined function validation_errors()
って出ればおk
index()を拡張していく
public function index(){ $this->load->helper('form'); $this->load->library('form_validation'); $validation = [ [ 'field' => 'username', 'label' => 'ユーザー名', 'rules' => 'required|min_length[5]|max_length[10]' ], [ 'field' => 'password', 'label' => 'パスワード', 'rules' => 'required|matches[passconf]' ], [ 'field' => 'passconf', 'label' => 'パスワードの確認', 'rules' => 'required' ], [ 'field' => 'email', 'label' => 'メールアドレス', 'rules' => 'required|valid_email' ] ]; $this->form_validation->set_rules($validation); if($this->form_validation->run() === false){ $this->load->view('myform'); }else{ $this->users_model->create_user(); $this->load->view('form_success'); } }
バリデーションの種類ならここ参照