コントローラーの拡張

CodeIgniter のコアコントローラーは変更すべきではありませんが、デフォルトのクラス拡張が **app/Controllers/BaseController.php** に用意されています。新しく作成するコントローラーは、事前にロードされたコンポーネントと追加機能を利用するために、BaseController を拡張する必要があります。

<?php

namespace App\Controllers;

class Home extends BaseController
{
    // ...
}

コンポーネントのプリロード

ベースコントローラーは、プロジェクトの実行時に毎回使用するヘルパー、モデル、ライブラリ、サービスなどをロードするのに最適な場所です。ヘルパーは、定義済みの $helpers 配列に追加する必要があります。たとえば、HTML ヘルパーとテキストヘルパーを普遍的に使用できるようにするには、次のようにします。

<?php

namespace App\Controllers;

use CodeIgniter\Controller;

abstract class BaseController extends Controller
{
    // ...

    protected $helpers = ['html', 'text'];

    // ...
}

ロードする他のコンポーネントや処理するデータは、コンストラクター initController() に追加する必要があります。たとえば、プロジェクトでセッションライブラリを頻繁に使用する場合は、ここで初期化することができます。

<?php

namespace App\Controllers;

use CodeIgniter\Controller;

abstract class BaseController extends Controller
{
    // ...

    /**
     * @var \CodeIgniter\Session\Session;
     */
    protected $session;

    public function initController(/* ... */)
    {
        // Do Not Edit This Line
        parent::initController($request, $response, $logger);

        $this->session = \Config\Services::session();
    }
}

追加メソッド

ベースコントローラーはルーティングできません。セキュリティ対策として、新しく作成する **すべて** のメソッドは protected または private として宣言し、BaseController を拡張する作成したコントローラーを介してのみアクセスできるようにする必要があります。

その他のオプション

複数のベースコントローラーが必要になる場合があります。新しく作成するコントローラーが正しいベースを拡張しさえすれば、新しいベースコントローラーを作成できます。たとえば、プロジェクトに複雑なパブリックインターフェースとシンプルな管理ポータルがある場合、パブリックコントローラーには BaseController を拡張し、管理コントローラーには AdminController を作成することができます。

ベースコントローラーを使用したくない場合は、コントローラーがシステムコントローラーを拡張することで、ベースコントローラーをバイパスできます。

<?php

namespace App\Controllers;

use CodeIgniter\Controller;

class Home extends Controller
{
    // ...
}