CodeIgniter 4.3 の変更点
CodeIgniter 4.3 は 2023-01-10 にリリースされたCodeIgniter4の最新バージョンです。
多くの機能追加と 破壊的な変更 が含まれています。アップグレードする前に以下を必ず確認してください。
ハイライト
- Query Builderに
upsert()
およびupsertBatch()
、deleteBatch()
メソッドが追加され、また、*Batch()
メソッドはクエリからデータをセットできるようになりました。 - デフォルトのバリデーションルールがStrictルールに変更されました。
- データベースエラーが発生した場合の例外処理が変更されました。
主な破壊的変更
データベースエラーが発生した場合の例外処理
データベースエラーが発生した場合に例外を投げるかどうかが変更されました。
以前のバージョンでは、開発・テスト環境では、データベースエラーが発生した場合に例外が投げられました。しかし、本番環境では例外は投げられず false
が返りました。
このように本番環境と開発・テスト環境で振る舞いが変わると、テストが書きづらいです。また、開発環境での動作しか知らない場合は、返り値をチェックするコードを書き忘れ、本番環境でのみエラーが発生しても処理が続いてしまう可能性がありました。
そのため、以下のように変更されました。
- データベースエラーが発生したときに投げられる例外クラスが、データベースドライバにより異なっていたものが、
DatabaseException
に統一されました。 DBDebug
とCI_DEBUG
の変更- データベース設定ファイルでのデフォルトの
DBDebug
の値がtrue
に変更されました。 - 以前のバージョンでは、本番環境にみ
false
に設定されていました。 - Query Builderは
DBDebug
がtrue
の場合に例外を投げるようになりました。 - 以前のバージョンでは、
CI_DEBUG
がtrue
の場合に例外を投げていました。 - 上記に変更により、
DBDebug
はエラー時に例外を投げるかどうかのフラグに意味が変わりました。 - ただし、トランザクション中は、
DBDebug
がtrue
でも例外が発生しないように変更されました。 - もし、トランザクション中でも例外が発生して欲しい場合は、
$db->transException(true)
をトランザクション開始前に実行してください。
- データベース設定ファイルでのデフォルトの
これで、開発時でも本番環境でも、エラーが発生した場合は例外が発生するようになりました(トランザクション中は除く)。
ただし、データベース設定ファイルは composer update
では更新されませんので、既存のプロジェクトはほぼ今まで通り、本番では例外が発生しないままになります。
主な機能追加
Formヘルパー
バリデーションのエラーを表示するための validation_errors()
、validation_list_errors()
、validation_show_error()
関数が追加されました。
Query Builder
upsert()
、upsertBatch()
、deleteBatch()
メソッドが追加されました。
また、クエリーの結果をデータとして使う setQueryAsData()
メソッドが追加され、insertBatch()
、updateBatch()
、 upsertBatch()
、deleteBatch()
メソッドで使えます。例えば、SELECTした結果をINSERTすることができます。
$subQuery = $this->db->table('user2')
->select('user2.name, user2.email, user2.country')
->join('user', 'user.email = user2.email', 'left')
->where('user.email IS NULL');
$this->db->table('user')->setQueryAsData($subQuery)->insertBatch();
Database Forge
既存のテーブルにインデックスを追加する Forge::processIndexes()
メソッドが追加されました。
$this->forge->addKey(['category', 'name'], false, false, 'category_name');
$this->forge->addPrimaryKey('id', 'pk_actions');
$this->forge->addForeignKey('userid', 'user', 'id', '', '', 'userid_fk');
$this->forge->processIndexes('actions');
複数ドメインのサポート
設定ファイル app/Config/App.php
に $allowedHostnames
が追加され、$baseURL
で設定されているホスト名以外の別のホスト名を設定することができるようになりました。
この設定により、 base_url()
、current_url()
、site_url()
などの返す値のホスト名部分が、リクエストに応じて変わります。
spark routes コマンド
spark routes
コマンドが、ルート名を表示するようになりました。
$ php spark routes
CodeIgniter v4.3.0 Command Line Tool - Server Time: 2023-01-13 08:42:59 UTC+00:00
+-----------+-----------------+------+-----------------------------------+----------------+---------------+
| Method | Route | Name | Handler | Before Filters | After Filters |
+-----------+-----------------+------+-----------------------------------+----------------+---------------+
| GET | / | » | \App\Controllers\Home::index | | toolbar |
| GET | feed | » | (Closure) | | toolbar |
| GET(auto) | product/list/.. | | \App\Controllers\Product::getList | | toolbar |
+-----------+-----------------+------+-----------------------------------+----------------+---------------+
»
は Route
と同じことを意味します。ルート feed
のルート名は feed
ということです。
なお、自動ルートにはルート名はありません。
HTML5互換性の向上
設定ファイル app/Config/DocTypes.php
に $html5
が追加され、true
にセットされた場合は、ヘルパーなどが出力するHTMLの空の要素(br
など)が <br />
ではなく、HTML5互換の <br>
になります。
他にも機能追加は多数あります。全てのリストは、 ChageLog を参照してください。
関連
参考
Date: 2023/01/13