コントローラのアップグレード

ドキュメント

変更された点

  • CodeIgniter 4 に名前空間が追加されたため、コントローラは名前空間をサポートするように変更する必要があります。

  • CI4 コントローラのコンストラクタは、コアクラスをプロパティに自動的にロードしません。

  • CI4 のコントローラには、特別なコンストラクタ initController() があります。

  • CI4 では、Request および Responses オブジェクトを使用して操作できます。これらは CI3 の方法よりも強力です。

  • 基本コントローラ (CI3 の MY_Controller) が必要な場合は、app/Controllers/BaseController.php を使用します。

  • CI3 のようにコントローラ内で echo を呼び出すことは、引き続きサポートされていますが、コントローラからは文字列または Response オブジェクトを返すことをお勧めします。

アップグレードガイド

  1. まず、すべてのコントローラファイルを app/Controllers フォルダに移動します。

  2. php タグの開始直後に次の行を追加します: namespace App\Controllers;

  3. extends CI_Controllerextends BaseController に置き換えます。

  4. もし存在する場合は、defined('BASEPATH') OR exit('No direct script access allowed'); という行を削除します。

コントローラ構造でサブディレクトリを使用する場合は、それに応じて名前空間を変更する必要があります。
たとえば、application/controllers/users/auth/Register.php にバージョン 3 のコントローラがある場合、名前空間は namespace App\Controllers\Users\Auth; にする必要があり、バージョン 4 のコントローラのパスは次のようになります: app/Controllers/Users/Auth/Register.php。サブディレクトリの最初の文字は大文字にしてください。
その後、BaseController を拡張するために、名前空間定義の下に use ステートメントを挿入する必要があります: use App\Controllers\BaseController;

コード例

CodeIgniter バージョン 3.x

パス: application/controllers

<?php

class Helloworld extends CI_Controller
{
    public function index($name)
    {
        echo 'Hello ' . html_escape($name) . '!';
    }
}

CodeIgniter バージョン 4.x

パス: app/Controllers

<?php

namespace App\Controllers;

class Helloworld extends BaseController
{
    public function index($name)
    {
        return 'Hello ' . esc($name) . '!';
    }
}