Install
$ curl -L https://github.com/bcit-ci/CodeIgniter/archive/3.1.11.zip > CodeIgniter.zip
$ unzip CodeIgniter.zip
$ mv CodeIgniter-3.1.11/* .
$ rm -r CodeIgniter-3.1.11 CodeIgniter.zip
Setting
language
# config/config.php
$config['language'] = 'japanese';
language/japanese/
に以下のURLでダウンロードできる、必要そうなものを配置する。
db
connecting to MySQL8
-
mysqli
ドライバーを使用する時の設定-
dsn
の設定をしない -
dbdriver
の設定 -
char_set
、dbbcollat
の設定をutf8mb4
にする
# config/database.php $db['default'] = array( 'dsn' => '', 'hostname' => 'localhost', // または対象のホスト名またはIPアドレス 'username' => 'your_username', // MySQLユーザー名 'password' => 'your_password', // MySQLパスワード 'database' => 'your_database_name', // 使用するデータベース名 'dbdriver' => 'mysqli', // MySQL Improvedを使用 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => (ENVIRONMENT !== 'production'), 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8mb4', // utf8mb4を推奨。4バイトのUnicodeもサポート。 'dbcollat' => 'utf8mb4_general_ci', // 同上 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
-
-
pdo
ドライバーを使用する時の設定-
dsn
の設定が必要 -
dbdriver
の設定 -
char_set
、dbbcollat
の設定をutf8mb4
にする
# config/database.php $db['default'] = array( 'dsn' => 'mysql:host=localhost;dbname=your_database_name;charset=utf8mb4', // DSNの形式で設定します 'hostname' => '', // dsnで指定しているため空にします 'username' => 'your_username', // MySQLユーザー名 'password' => 'your_password', // MySQLパスワード 'database' => '', // dsnで指定しているため空にします 'dbdriver' => 'pdo', // dbdriverをpdoに設定 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => (ENVIRONMENT !== 'production'), 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8mb4', // utf8mb4を推奨。4バイトのUnicodeもサポート。 'dbcollat' => 'utf8mb4_general_ci', // 同上 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
-
MySQL 8.0のデフォルトの認証プラグインcaching_sha2_password
は多くのPHPのPDOバージョンでサポートされていない。そのため、MySQLユーザーがmysql_native_password
を使用するように設定する必要がある。
# 確認
SELECT user, host, plugin FROM mysql.user;
# 変更
alter user 'ユーザー'@'ホスト' identified with mysql_native_password by 'パスワード';
Validation
https://codeigniter.jp/user_guide/3/libraries/form_validation.html
handling dual field
# config/validation.php
// 手数料のバリデーションはコールバック関数を用いて実装
array(
'field' => 'commission_rate',
'label' => '手数料率 (実質年率)',
'rules' => 'callback_commission_rate_check',
),
// 手数料のバリデーションが掛かった時、背景を赤くするために以下2つのフィールドを設定
array(
'field' => 'commission_rate1',
'label' => '手数料率(整数)',
'rules' => '',
),
array(
'field' => 'commission_rate2',
'label' => '手数料率(小数)',
'rules' => '',
),
# controller
function get_errors()
{
$results = array();
$fields = array();
$results['all'] = validation_errors();
if ($this->CI->session->userdata('error')) {
$results['all'] .= $this->CI->session->userdata('error');
$this->CI->session->unset_userdata('error');
}
foreach ($this->rules as $rule) {
$results[$rule['field']] = form_error($rule['field']);
if (form_error($rule['field'])) {
$fields[] = $rule['field'];
}
}
// エラーの時に背景を赤くするための実装。
if (!empty($results['commission_rate'])) {
$fields[] = 'commission_rate1';
$fields[] = 'commission_rate2';
}
$results['fields'] = implode(',', $fields);
return $results;
}
Model
basic
# config/autoload.php
$autoload['libraries'] = array(
'database', //これを書く
);
# Controller
$this->load->model("model_name");
$this->model_name->method();
# Model
function method()
{
$query = $this->db->get('user');
return $query->result();
}
built-in function
-
result()
結果全部をオブジェクトで返す。
アクセス方法
$aaa->xxx
-
result_array()
:結果全部を配列で返す
アクセス方法
$aaa['bbb'];
-
row()
1行をオブジェクトで返す
-
row_array()
1行を配列で返す
Library
service
how to create
そもそもアーキテクチャがMVCだからcontrollerのように
class Xxx extends CI_Controller {
}
のようにできない。従って、CIの core functions を使いたい時は以下のようにCIのインスタンスをget_instance()
で作ってあげる必要がある。
class Yyy_service
{
private $CI;
public function __construct()
{
$this->CI &= get_instance();
$this->CI->load->model([
'user_model',
]);
}
}
image
https://codeigniter.jp/user_guide/3/libraries/image_lib.html
setting of Imagemagick
imagimagickは開発環境では/usr/bin
に居る。本番環境では/usr/local/bin
に居る。確認コマンドは
$ convert -version
上のどこかにはいるので、そのパスを下記
'library_path' => '/usr/bin',
に記述する。
$resize_config = [
'image_library' => 'imagemagick',
'library_path' => '/usr/bin',
'source_image' => $data['full_path'],
'quality' => 50,
'file_permissions' => 0777,
];
あと、php.iniのに下記を書いて上げることでラップできてインストールしなくても使える?
; Provides a wrapper to the ImageMagick library.
extension_dir=/usr/local/lib/php70/20151012/ ←ここ
extension=imagick.so
Template Parser
改行判定
-
半角空白を入れる
-
以下のコードを入れる
<?php echo "\n"; ?>
Test
https://codeigniter.jp/user_guide/3/libraries/unit_testing.html
using php unit test
application/tests
を作成
# application/tests/ExampleTest.php
<?php
class ExampleTest extends PHPUnit_Framework_TestCase
{
public function testTrueIsTrue()
{
$this->assertTrue(true);
}
}
vendor/bin/phpunit application
PHPUnit 5.7.27 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 10 ms, Memory: 4.00MB
OK (1 test, 1 assertion)
Deploy
toggle CI_ENV
.htaccess
を使う
# /.htaccess
SetEnvIf Host "^localhost" CI_ENV=development
SetEnvIf Host "^(www.)?hoge.com" CI_ENV=production