RubyonRails や Laravelの .env をCodeIgniterにも導入します。
これによって WEBアプリの設定が .env に集約されるので、 .gitignore しておけば余計な情報が リポジトリに上がることはありません。
codeigniter/application 以下にインストールします。
cd codeigniter/application
composer require vlucas/phpdotenv
エディタで下記の行を TRUE に設定します。
$config['composer_autoload'] = TRUE;
エディタで下記の行を TRUE に設定します。
$config['enable_hooks'] = TRUE;
エディタで hooks.php の一番下に下記の行を 追記します。
codeigniter/config/hooks.php
$hook['pre_system'] = function() {
try {
$dotenv = Dotenv\Dotenv::createImmutable(APPPATH);
// $dotenv = Dotenv\Dotenv::create(APPPATH); // こちらは Dotenv の古いバージョンのやり方です
$dotenv->load();
} catch (Exception $e) {
//
}
function env($variable, $default = null) {
$value = getenv($variable);
return ($value) ? $value : $default;
}
};
codeigniter/application/.env を新規作成し、以下の内容を適宜書き換えて保存します。
APP_NAME="My-Application"
APP_URL="http://localhost:8000/"
DB_DRIVER="mysqli"
DB_HOST="localhost"
DB_USER="root"
DB_PASS="root"
DB_NAME="ci"
MAIL_DRIVER="smtp"
MAIL_HOST="YOUR.SERVER"
MAIL_PORT=25
MAIL_USERNAME=""
MAIL_PASSWORD=""
MAIL_ENCRYPTION="tls"
MAIL_FROM_ADDRESS="YOUR@ADDRESS"
MAIL_FROM_NAME="YourName"
STRIPE_SECRET_KEY=""
STRIPE_PUBLIC_KEY=""
あとは好きなところから コントローラーから
print_r( env('APP_NAME') );
として使用します。
config/database.php の次の行を
'hostname' => 'localhost',
'username' => '',
'password' => '',
'database' => '',
'dbdriver' => 'mysqli',
↓ このように書き換えます
'hostname' => env('DB_HOST'),
'username' => env('DB_USER'),
'password' => env('DB_PASS'),
'database' => env('DB_NAME'),
'dbdriver' => env('DB_DRIVER'),
.env ファイルが codeigniterの application フォルダに入っている場合は、外から見えることはありません。
別の場所に移動させたい場合は .htaccess を次の内容で作成します。
require valid-user
<Files ~ "^.(htpasswd|htaccess|digest|env)$">
deny from all
</Files>
CodeIgniterはPHPフレームワークの中でも比較的シンプルでフレームワーク初学者にはCakePHPよりおすすめします。 動作も高速です。
composer.json
contributing.md
license.txt
readme.rst
user_guide(フォルダ)
サーバの任意のディレクトリ(この場合では ~/php_composer/ )へcomposerをインストールします。
cd ~/php_composer/
curl -sS https://getcomposer.org/installer | php
(インストール後に composer.phar のパスが表示されます。これがcomposerコマンドの場所です。)
.bash_profileなどにパスを追加 vi などで下記の行を追加します。
PATH="$PATH":~/php_composer/
bach を再起動したら「CodeIgniter Composer Installer」を使ってCodeIgniterをインストールします。
■ CodeIgniter Composer Installer https://github.com/kenjis/codeigniter-composer-installer
CodeIgniterをインストールしたディレクトリから以下を実行
composer.phar create-project kenjis/codeigniter-composer-installer codeigniter
$route['default_controller'] = 'welcome';
この行の 'welcome' を 'top' に変更します。
$route['default_controller'] = 'top'; // welcome → top に変更
ファイル名は「Top.php」(先頭は大文字)でなければいけません。
中身は以下のようにします。(クラス名「Top」先頭は大文字でなければいけません)
<?php
class Top extends CI_Controller {
public function index()
{
$this->load->view('topview');
}
}
とします。
拡張子は .php ですが 中身はHTMLファイルなので以下の様な内容にします。
<html>
<body>
<h1>test</h1>
</body>
</html>
ここで
http://localhost/codeigniter/index.php/Top
にアクセスしてテンプレートが表示されることを確認します。
今回 データベースにはsqlite3 を使用してみます。
$active_group = 'default';
$query_builder = TRUE;
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => '',
'password' => '',
'database' => APPPATH.'sqlite3/test.sqlite3',
'dbdriver' => 'sqlite3',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
$config['migration_enabled'] = TRUE; // FALSE → TRUE に変更
$config['migration_type'] = 'sequential'; // マイグレーション管理を「日付」→「連番」に変更
$config['migration_version'] = 1; // 現在のバージョン
<?php
class Migration_Create_table extends CI_Migration {
public function __construct(){
parent::__construct();
}
public function up(){
$this->dbforge->add_field(array(
'data_id' => array(
'type' => 'INT',
'unsigned' => TRUE,
'auto_increment' => TRUE
),
'user_name' => array(
'type' => 'VARCHAR',
),
'modified_date' => array(
'type' => 'TEXT',
),
));
$this->dbforge->add_key('data_id', true);
$this->dbforge->create_table('user_dt');
}
public function down(){
$this->dbforge->drop_table('user_dt');
}
}
↑このファイルはSQL文で言うところの
CREATE TABLE mandolin_chord_dt (
data_id integer PRIMARY KEY NOT NULL,
user_name varchar NOT NULL,
modified_date text
);
になります。
<?php
class Migrate extends CI_Controller
{
public function index(){
$this->load->library('migration');
if ($this->migration->current() === FALSE){
show_error($this->migration->error_string());
}
}
}
codeigniter/application/sqlite3/test.sqlite3 が作成されていることを確認します
またテーブルも正しく作成されているかどうか確認します
codeigniterはデータベースへのアクセスクラスを持っています。 使い方は以下のとおり( test_dt から全件取得し表示する例。)
$this->load->database();
$this->db->from('test_dt');
$this->db->select('*');
$query = $this->db->get();
$data_loop = $query->result_array();
print_r($data_loop);
system/core/CodeIgniter.php
にバージョン記述があります。
CodeIgniter 3.0でPHPUnitを使う post http://blog.a-way-out.net/blog/2015/05/19/ci-phpunit-test/