コードイグネーターを業務で使うので調べてまとめた

## はじめに
タイトルからわかるように、知見がないので調べて備忘録として残しております。
間違えなどあれば教えていただけると幸いです

## 簡潔に
・MVCモデルを採用
・他のフレームワークと比較して非常に軽量
・ドキュメントが充実
・データベース操作、フォームバリデーション、セッション管理、キャッシュ機能などの豊富なライブラリが標準で用意されている

同じPHPフレームワークのLaravelとは対照的で
【高速動作（軽量）】かつ【手軽さ】が魅力のフレームワーク

## ライブラリについて
　 
#### ・データベースライブラリ
```php
$this->load->database();
$query = $this->db->get('users'); // 'users'テーブルの全データ取得
foreach ($query->result() as $row) {
    echo $row->name;
}
```
load->db->('テーブル名')
これだけの記述でテーブルからデータを取ることが可能。
業務ではSQLを使っているためこの記述はしていないがLaravelのクエリビルダと見た感じ同じそう。

#### ・バリデーションライブラリ
```php
$this->load->library('form_validation');
$this->form_validation->set_rules('name', 'label', 'required|min_length[5]',[
    'required' => '「{field}」は入力必須です。',
    'min_length' => '{field}は最低5文字必要です。'
    ]);
if ($this->form_validation->run() == FALSE) {
    echo validation_errors();
} else {
    echo "入力OK！";
}
```
libraryの引数にform_validation
set_rulesの引数は
第一引数がinputのnameの値
第二引数がメッセージに表示するフィールド
第三引数がバリデーションルール
第四引数がバリデーションエラーのメッセージ

もしvalidation_errorsを出力した際には
```
「label」は入力必須です。
labelは最低5文字必要です。
```
のように出力される。


#### ・セッションライブラリ
```php
$this->load->library('session');
$this->session->set_userdata('username', 'Taro');
echo $this->session->userdata('username');
```
libraryの引数にsession
set_userdataの第一引数にkey,第二引数にvalueをいれたらセッションに入る。
呼び出すときはkeyを指定して出力する。

:::note info

だいたいコードで理解できると思うので以下ライブラリの説明は割愛します。↓
:::

#### ・アップデートライブラリ（ファイル）
```php
$config['upload_path']   = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$this->load->library('upload', $config);

if (!$this->upload->do_upload('userfile')) {
    echo $this->upload->display_errors();
} else {
    echo "アップロード成功！";
}
```
#### ・Emailライブラリ
```php
$this->load->library('email');
$this->email->from('your@example.com', 'Your Name');
$this->email->to('someone@example.com');
$this->email->subject('メールテスト');
$this->email->message('こんにちは！');
$this->email->send();
```
#### ・ページネーションライブラリ
```php
$this->load->library('pagination');
$config['base_url'] = 'http://example.com/index.php/test/page/';
$config['total_rows'] = 200;
$config['per_page'] = 20;
$this->pagination->initialize($config);
echo $this->pagination->create_links();
```
#### ・Encryptionライブラリ（暗号化）
```php
$this->load->library('encryption');
$plain_text = "シークレットデータ";
$cipher_text = $this->encryption->encrypt($plain_text);
echo $this->encryption->decrypt($cipher_text);
```
#### ・Cartライブラリ（ショッピングカート）
```php
$this->load->library('cart');
$data = array(
    'id'      => 'sku_123ABC',
    'qty'     => 1,
    'price'   => 39.95,
    'name'    => '商品名'
);
$this->cart->insert($data);
```
#### ・Image Manipulationライブラリ
```php
$config['image_library'] = 'gd2';
$config['source_image'] = './uploads/image.jpg';
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 150;
$config['height'] = 100;
$this->load->library('image_lib', $config);
$this->image_lib->resize();
```


などなど

### ライブラリの読み込みについて

上のコードを見ての通り
データベース以外は
```php
$this->load->library('ライブラリ名');
```
で呼び出し可能。
まとめて呼び出す場合には
```php
$this->load->library(array('ライブラリ名', 'ライブラリ名', 'ライブラリ名'));
```

このような記述でOK

### ヘルパー関数について

ヘルパーを使うためにファイルごとで読み込む必要がある。
```php
$this->load->helper('form');
// もしくは
$autoload['helper'] = array('form');
```

### ・form_open
```php
echo form_open('controller/method', ['id' => 'my_form', 'class' => 'form-class']);
// ↓
<form method="post" action="http://example.com/controller/method" id="my_form" class="form-class">
```
※CSRF保護付き

### ・form_close
```php
echo form_close();
// ↓
</form>
```

### ・form_input
```php
echo form_input([
    'name'  => 'username',
    'id'    => 'username',
    'value' => '初期値',
    'class' => 'form-control'
]);
// ↓
<input type="text" name="username" id="username" value="初期値" class="form-control">
```

### ・form_password
```php
echo form_password('password');
// ↓
<input type="password" name="password" value="">
```

### ・form_hidden
```php
echo form_hidden('user_id', '123');
// ↓
<input type="hidden" name="user_id" value="123">
```

### ・form_textarea
```php
echo form_textarea('comments', 'ここに入力...');
// ↓
<textarea name="comments">ここに入力...</textarea>
```


### ・form_dropdown
```php
$options = [
    'small' => 'Small Shirt',
    'med'   => 'Medium Shirt',
    'large' => 'Large Shirt'
];
echo form_dropdown('shirt_size', $options, 'med');
// ↓
<select name="shirt_size">
    <option value="small">Small Shirt</option>
    <option value="med" selected="selected">Medium Shirt</option>
    <option value="large">Large Shirt</option>
</select>
```

### ・form_submit
```php
echo form_submit('submit', '送信');
// ↓
<input type="submit" name="submit" value="送信">
```

### ・form_label
```php
echo form_label('ユーザー名', 'username');
// ↓
<label for="username">ユーザー名</label>
```

### ・form_checkbox
```php
echo form_checkbox('agree', '1', FALSE, ['id' => 'agree']);
// ↓
<input type="checkbox" name="agree" value="1" id="agree">
```

### ・form_radio
```php
echo form_radio('gender', 'male', TRUE, ['id' => 'male']);
echo form_radio('gender', 'female', FALSE, ['id' => 'female']);
// ↓
<input type="radio" name="gender" value="male" id="male" checked="checked">
<input type="radio" name="gender" value="female" id="female">
```