コントローラのアップグレード
ドキュメント
変更された点
CodeIgniter 4 に名前空間が追加されたため、コントローラは名前空間をサポートするように変更する必要があります。
CI4 コントローラのコンストラクタは、コアクラスをプロパティに自動的にロードしません。
CI4 のコントローラには、特別なコンストラクタ initController() があります。
CI4 では、Request および Responses オブジェクトを使用して操作できます。これらは CI3 の方法よりも強力です。
基本コントローラ (CI3 の
MY_Controller
) が必要な場合は、app/Controllers/BaseController.php を使用します。CI3 のようにコントローラ内で
echo
を呼び出すことは、引き続きサポートされていますが、コントローラからは文字列または Response オブジェクトを返すことをお勧めします。
アップグレードガイド
まず、すべてのコントローラファイルを app/Controllers フォルダに移動します。
php タグの開始直後に次の行を追加します:
namespace App\Controllers;
extends CI_Controller
をextends BaseController
に置き換えます。もし存在する場合は、
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) . '!';
}
}