2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CodeIgniter4でDB接続まで

Last updated at Posted at 2020-04-30

インストール〜環境設定まではこちらをご覧ください。

#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.phpHome.phpHomeクラスのindexというメソッド(関数)が/だぞという定義が記述してあるからなのですが、この辺は今回は割愛します。
(ここらへんのRoutingの仕組みはCI3とほぼ同じです)

そしてCIのルーティングに不慣れな人は面食らうかもしれませんが、現在の設定において
http://exapmle.com/ (クラス名、メソッド名が省略)

http://exapmle.com/Home (メソッド名が省略)
であり
http://exapmle.com/Home/index (両方ちゃんと表記したもの)
でもあり、これはすべて同じページを指します。

この辺のURLの記述ルールは頭に入れておいたほうがいいと思います。

#接続テスト

いよいよDBに接続するテストをしてみます。

まずapp/Controllers/Home.phpのコントローラをエディタで開いてください。
ファイルのソースは次のような感じになっているはずです。

app/Controllers/Home.php
<?php namespace App\Controllers;

class Home extends BaseController
{
	public function index()
	{
		return view('welcome_message');
	}

	//--------------------------------------------------------------------

}

ここに次のメソッドを追加してください。

app/Controllers/Home.php
<?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

.env
 database.default.charset = utf8mb4 あるいは utf8 など Collationに合わせた文字コード
 database.default.DBCollat = utf8mb4_general_ci や utf8_general_ci などお好みの照合順序

を記述することで指定した文字コード及び照合順序で接続が可能になります。

次回はDBForgeを利用してDB自体を作る方法を解説したいと思います。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?