LoginSignup
0
0

僕なりの Codeigniter3 備忘録

Posted at

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

https://codeigniter.jp/user_guide/3/libraries/language.html

# config/config.php
$config['language']	= 'japanese';

language/japanese/に以下のURLでダウンロードできる、必要そうなものを配置する。

db

connecting to MySQL8

  • mysqliドライバーを使用する時の設定

    • dsnの設定をしない
    • dbdriverの設定
    • char_setdbbcollatの設定を 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_setdbbcollatの設定を 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

https://codeigniter.jp/user_guide/3/general/models.html

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

https://codeigniter.jp/user_guide/3/libraries/parser.html

改行判定

  • 半角空白を入れる

  • 以下のコードを入れる

     <?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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0