インストール〜環境設定まではこちらをご覧ください。
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自体を作る方法を解説したいと思います。