バージョン 4.2.0

リリース日:2022年6月3日

CodeIgniter4の4.2.0リリース

ハイライト

  • 最小PHP要件を7.4に更新。

  • デフォルトの設定をより安全にするために、自動ルーティングはデフォルトで無効に変更されました。

  • Oracleデータベース用のOCI8ドライバytetsuro氏提供)。データベースを参照してください。

  • 改良された自動ルーティング(オプトイン)(kenjis氏提供)。新しい改良された自動ルーティングを参照してください。

  • QueryBuilderのサブクエリUNIONのサポート(Andrey Pyzhikov氏提供)。データベースを参照してください。

新規コントリビューター

破壊的変更

メソッドシグネチャの変更

  • CodeIgniter\Database\BaseBuilder::join()CodeIgniter\Database\*\Builder::join()のメソッドシグネチャが変更されました。

  • Validation::setRule()のメソッドシグネチャが変更されました。$rulesパラメータのstring型ヒントが削除されました。拡張クラスも同様にパラメータを削除する必要があります(LSPを破らないように)。

  • CodeIgniter\CLI\CommandRunner::_remap()のメソッドシグネチャがバグ修正のために変更されました。

  • Service::reset()CIUnitTestCase::resetServices()のデフォルトパラメータ値がfalseからtrueに変更されました。これは、テスト中の予期しない問題(例:lang()が翻訳されたメッセージを取得しないなど)を排除するためです。

動作の変更

  • CodeIgniter\CodeIgniterクラスに新しいプロパティ$contextが追加され、実行時に正しいコンテキストを持つ必要があります。そのため、以下のファイルが変更されました。
    • public/index.php

    • spark

  • system/bootstrap.phpファイルは、プリローディングを容易に実装するために修正されました。CodeIgniterインスタンスの返却と.envファイルの読み込みはindex.phpsparkに移されました。

  • CodeIgniter\Autoloader\Autoloader::initialize()の動作がバグ修正のために変更されました。以前は、$modules->discoverInComposerがtrueの場合のみComposerのクラスマップを使用していました。現在は、Composerが利用可能な場合は常にComposerのクラスマップを使用します。

  • CLI::color()によって出力されるカラーコードがバグ修正のために変更されました。

  • ウェブブラウザからの予期しないアクセスを防ぐため、コントローラーがcliルート($routes->cli())に追加された場合、そのコントローラーのすべてのメソッドは自動ルーティング経由ではアクセスできなくなりました。

  • History Collectorを拡張しているユーザーに対して、後方互換性を壊す可能性があります。おそらくHistory::setFiles()メソッドを更新する必要があります。

  • dot_array_search()の予期しない動作が修正されました。現在dot_array_search('foo.bar.baz', ['foo' => ['bar' => 23]])nullを返します。以前のバージョンでは23を返していました。

  • CodeIgniter::storePreviousURL()は、Content-Typeがtext/htmlのURLのみを保存するように変更されました。これにより、previous_url()redirect()->back()の動作にも影響します。

機能強化

新しい改良された自動ルーティング

より安全な新しいオプションの自動ルーターを追加しました。従来の自動ルーティングからの変更点は次のとおりです。

  • コントローラーメソッドには、getIndex()postCreate()のようにHTTP動詞プレフィックスが必要です。
    • 開発者は常にHTTPメソッドを知っているので、予期しないHTTPメソッドによるリクエストは通過しません。

  • デフォルトコントローラー(デフォルトではHome)とデフォルトメソッド(デフォルトではindex)はURIに省略する必要があります。
    • コントローラーメソッドとURIの1対1対応を制限します。

    • 例:デフォルトでは/にアクセスできますが、/home/home/indexは404になります。

  • メソッドパラメーター数をチェックします。
    • URIのパラメーターがメソッドパラメーターよりも多い場合、404になります。

  • _remap()メソッドはサポートされていません。
    • コントローラーメソッドとURIの1対1対応を制限します。

  • 定義済みルート内のコントローラーにアクセスできません。
    • **自動ルート**経由でアクセス可能なコントローラーと**定義済みルート**経由でアクセス可能なコントローラーを完全に分離します。

詳細は自動ルーティング(改良版)を参照してください。

データベース

  • データベースに新しいOCI8ドライバを追加しました。
    • Oracleデータベースにアクセスでき、SQLとPL/SQLステートメントをサポートします。

  • クエリビルダー
    • FROMセクションにサブクエリを追加しました。サブクエリを参照してください。

    • SELECTセクションにサブクエリを追加しました。SELECTを参照してください。

    • BaseBuilder::buildSubquery()メソッドは、オプションの第3引数string $aliasを受け入れることができます。

    • UNIONクエリ。UNIONクエリを参照してください。

  • Raw SQL文字列のサポート
  • SQLite3に、外部キー制約を有効にする新しい設定項目foreignKeysが追加されました。

ヘルパーと関数

  • HTMLヘルパーscript_tag()は、ブール属性を最小限の形式で記述するためにnull値を使用するようになりました:<script src="..." defer />script_tag()のサンプルコードを参照してください。

  • get_filenames()に4番目のパラメーター$includeDirを追加しました。get_filenames()を参照してください。

  • log_message()を介してログに記録された例外情報は改善されました。例外が発生したファイルと行が含まれるようになりました。また、メッセージは切り捨てられなくなりました。
    • ログ形式も変更されました。アプリケーションでログ形式に依存しているユーザーの場合、新しいログ形式は「<1ベースのカウント> <クリーンアップされたファイルパス>(<行>):<クラス><関数><引数>」です。

コマンド

  • spark db:tableコマンドを追加しました。詳細はデータベースコマンドを参照してください。
    • 現在接続しているデータベース内のすべてのテーブルの名前をターミナルに表示できるようになりました。
      • spark db:table --show

    • または、テーブルのフィールド名とレコードを表示できます。
      • spark db:table my_table

      • spark db:table my_table --limit-rows 50 --limit-field-value 20 --desc

    • または、列の種類、テーブルの最大長などのメタデータを表示できます。
      • spark db:table my_table --metadata

  • spark routesコマンドは、クロージャルート、自動ルート、およびフィルターを表示するようになりました。URIルーティングを参照してください。

その他

  • コントローラーに$this->validateData()を追加しました。$this->validateData()を参照してください。

  • コンテンツセキュリティポリシー(CSP)の機能強化
    • CSPプレースホルダー({csp-script-nonce}{csp-style-nonce})をカスタマイズするために、Config\ContentSecurityPolicyに設定$scriptNonceTag$styleNonceTagを追加しました。

    • CSPプレースホルダーの置換を無効にするために、Config\ContentSecurityPolicyに設定$autoNonceを追加しました。

    • nonce属性を取得するための関数csp_script_nonce()csp_style_nonce()を追加しました。

    • 詳細はコンテンツセキュリティポリシーを参照してください。

  • 新しいビューデコレーターにより、キャッシュする前に生成されたHTMLを変更できます。

  • 厳格なバリデーションルールを追加しました。従来のルールと厳格なルールを参照してください。

  • app/Config/Mimes.phpにwebpファイルのサポートを追加しました。

  • RouteCollection::addRedirect()は、プレースホルダーを使用できるようになりました。詳細はリダイレクトルートを参照してください。

  • デバッグバーの機能強化
    • デバッグツールバーは、time()の代わりにmicrotime()を使用するようになりました。

  • プリロードのサンプルファイル(preload.php)を追加しました。

変更点

  • 最小PHP要件を7.4に更新。

  • デフォルトの設定をより安全にするために、自動ルーティングはデフォルトで無効に変更されました。

  • バリデーション。ワイルドカード(*)を使用するフィールドを使用する場合のエラーの生成を変更しました。エラーキーには、完全なパスが含まれるようになりました。すべてのエラーの取得を参照してください。

  • ワイルドカードを使用する場合、Validation::getError()は、マスクに一致するすべての検出されたエラーを文字列として返します。

  • 現在のバージョンのコンテンツセキュリティポリシー(CSP)は、スクリプトタグに1つのnonce、スタイルタグに1つのnonceを出力します。以前のバージョンでは、各タグに1つのnonceを出力していました。

  • Cookieの送信プロセスは、Responseクラスに移動されました。SessionクラスはCookieを送信せず、Responseに設定します。

非推奨

  • CodeIgniter\Database\SQLSRV\Connection::getError()は非推奨になりました。代わりにCodeIgniter\Database\SQLSRV\Connection::error()を使用してください。

  • CodeIgniter\Debug\Exceptions::cleanPath()CodeIgniter\Debug\Toolbar\Collectors\BaseCollector::cleanPath()は非推奨になりました。代わりにclean_path()関数を使用してください。

  • CodeIgniter\Log\Logger::cleanFilenames()CodeIgniter\Test\TestLogger::cleanup()はどちらも非推奨になりました。代わりにclean_path()関数を使用してください。

  • CodeIgniter\Router\Router::setDefaultController()は非推奨になりました。

  • spark内の定数SPARKEDは非推奨となりました。CodeIgniter\CodeIgniter$contextプロパティを使用してください。

  • CodeIgniter\Autoloader\Autoloader::discoverComposerNamespaces()は非推奨となり、使用されなくなりました。

  • 定数EVENT_PRIORITY_LOWEVENT_PRIORITY_NORMALEVENT_PRIORITY_HIGHは非推奨となりました。クラス定数CodeIgniter\Events\Events::PRIORITY_LOWCodeIgniter\Events\Events::PRIORITY_NORMALCodeIgniter\Events\Events::PRIORITY_HIGHを使用してください。

修正されたバグ

  • SQLSRVドライバは、設定からのポート値を無視します。

修正されたバグの完全なリストについては、リポジトリのCHANGELOG_4.2.mdを参照してください。