インストール〜環境設定まではこちらをご覧ください。
#DB接続テストの前にコントローラについてかんたんに説明
あなたのホストはhttp://exapmle.com/
だと仮定します。
まずは、ブラウザでCI4のトップページが見えている状態にしてください。
そして、現在はci4tset
のディレクトリ内にいると仮定します。
/home/ci4test
├── .env <-- 前回作った環境設定ファイル
├── app
│ └── Controllers
│ └── Home.php <-- 今回操作するファイル
├── htdocs <-- 前回書き換えたドキュメントルート
│ └── index.php
└── writable
このページはapp/Controllers/Home.php
のコントローラで動いています。
CI4ではControllerディレクトリ配下の(拡張子を除いた)ファイル名=クラス名=URLのパスの第一階層というルールで動作しています。
##URLはどうなっているのか?
apacheでmod_rewriteが有効ならば、htdocs/.htaccess
が適切にURLの書き換えを行ってくれます。
この場合は、
http://example.com/コントローラのクラス名/メソッド名/[引数1/[引数2/]...]
という形でアクセスできます。無効の場合は
http://example.com/index.php/コントローラのクラス名/メソッド名/[引数1/[引数2/]...]
という形になります。
この辺はCI3の仕組みがそのまま踏襲されています。
##なぜトップページがHome.php
なのか?
これはapp/Config/Routes.php
にHome.php
のHome
クラスのindex
というメソッド(関数)が/
だぞという定義が記述してあるからなのですが、この辺は今回は割愛します。
(ここらへんのRoutingの仕組みはCI3とほぼ同じです)
そしてCIのルーティングに不慣れな人は面食らうかもしれませんが、現在の設定において
http://exapmle.com/
(クラス名、メソッド名が省略)
は
http://exapmle.com/Home
(メソッド名が省略)
であり
http://exapmle.com/Home/index
(両方ちゃんと表記したもの)
でもあり、これはすべて同じページを指します。
この辺のURLの記述ルールは頭に入れておいたほうがいいと思います。
#接続テスト
いよいよDBに接続するテストをしてみます。
まずapp/Controllers/Home.php
のコントローラをエディタで開いてください。
ファイルのソースは次のような感じになっているはずです。
<?php namespace App\Controllers;
class Home extends BaseController
{
public function index()
{
return view('welcome_message');
}
//--------------------------------------------------------------------
}
ここに次のメソッドを追加してください。
<?php namespace App\Controllers;
use Config\Database;
class Home extends BaseController
{
public function index()
{
return view('welcome_message');
}
//--------------------------------------------------------------------
public function connectionTest()
{
$db = Database::connect();
echo "このDBのテーブル=" . implode( ',' , $db->listTables() );
return;
}
}
動作をチェックするにはhttp://example.com/Home/connectionTest/
にアクセスしてください。
すでにDBが存在し、何がしかのテーブルがあれば、そのDBのすべてのテーブル名がカンマ区切りで表示されます。
テーブルがない場合はこのDBのテーブル=
のみが表示されるはずです。
もしDBが存在しない場合は、DBドライバがSQLite3
以外の場合はエラー画面が表示されます。
話が少しそれますが、SQLite3
の場合、DBが存在しないときは.env
ファイルのdatabase.default.database
で設定された名前のSQLite3のDBファイルが作られます。このパラメータはのパスを省略した場合ドキュメントルート直下にDBファイルが生成されます。
なお、このディレクトリが書込み可能でない場合はエラーになります。
このファイル名はもちろん絶対パスや、ドキュメントルートを起点とした../writable/ci4test.db
のような相対パスで記述も可能です。
##照合順序も設定可能です
MySQLで文字コードや照合順序を指定する場合は、.env
に
database.default.charset = utf8mb4 あるいは utf8 など Collationに合わせた文字コード
database.default.DBCollat = utf8mb4_general_ci や utf8_general_ci などお好みの照合順序
を記述することで指定した文字コード及び照合順序で接続が可能になります。
次回はDBForgeを利用してDB自体を作る方法を解説したいと思います。