扩展控制器

CodeIgniter 的核心控制器不应该被更改,但一个默认的类扩展在 app/Controllers/BaseController.php 中提供给你。你创建的任何新控制器都应该扩展 BaseController 以利用预加载的组件和你提供的任何额外功能

<?php

namespace App\Controllers;

class Home extends BaseController
{
    // ...
}

预加载组件

基础控制器是加载任何助手、模型、库、服务等的好地方,这些助手、模型、库、服务等你打算在项目每次运行时使用。助手应该添加到预定义的 $helpers 数组中。例如,如果你想让 HTML 和 Text 助手在全局范围内可用

<?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();
    }
}

附加方法

基础控制器不可路由。作为额外的安全措施,您创建的所有新方法都应声明为 protectedprivate,并且只能通过您创建的扩展 BaseController 的控制器访问。

其他选项

您可能会发现您需要多个基础控制器。您可以创建新的基础控制器,只要您创建的任何其他控制器都扩展了正确的基础控制器即可。例如,如果您的项目有一个复杂的公共接口和一个简单的管理门户,您可能希望将 BaseController 扩展到公共控制器,并为任何管理控制器创建 AdminController

如果您不想使用基础控制器,您可以通过让您的控制器扩展系统控制器来绕过它。

<?php

namespace App\Controllers;

use CodeIgniter\Controller;

class Home extends Controller
{
    // ...
}