コントローラーの拡張
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
{
// ...
}