動かざることバグの如し

近づきたいよ 君の理想に

CodeIgniter3をインストールからフォーム作成まで

CodeIgniterとは

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');
    }
}

上記コードは適当だけど、こうすると

  • index.php/form/にアクセスするとviews/site1.phpが表示
  • index.php/form/hoge/にアクセスするとviews/site2.phpが表示

となる。なおコンストラクタを記述しない場合は自動的に親のコンストラクタのみ実行されるので子コンストラクタに特に記述しない場合は省略しても動く。

なお、URLに3つ以上のセグメントが含まれる場合、3番目以降のセグメントはメソッドに引数として渡される。例えばindex.php/users/show/123/だった場合、このように書ける

<?php
class Users extends CI_Controller {

    public function show($id){

バリデーション付フォームを作る

まずは公式ドキュメントを参考に登録フォームを作ってみる

作るにあたってCodeIgniterはバリデーション等の文章を日本語にする必要がある。

  • ここから言語ファイルをダウンロード
  • application/languageJapaneseを展開
  • application/config/config.phpより以下をjapaneseに変更
$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');
        }
    }

バリデーションの種類ならここ参照