如何自动加载 codeigniter4 库一次并在控制器、模型、视图中的每个位置访问它,就像在 CI3 中一样

SPS*_*SPS 0 codeigniter codeigniter-3 codeigniter-4

在 CI3 中,我们制作自定义库并在 config/autoload.php 中自动加载它,然后我们可以在控制器、模型、视图中的任何地方使用它,通过简单的 $this->rules->status() 其中 Rules 是应用程序/库中的库文件夹

但是无法在 CI 4 中做同样的事情,是否有其他可用的替代方法

ViL*_*Lar 6

如果你想加载你自己的库,你必须依赖命名空间并在你想使用这个库时创建一个新对象。还要确保检查app/Config/Autoload.php文件,以便自动加载器知道您的自定义库。
由于 codeigniter 3 超级对象已被删除,因此您无法随时随地访问它。但是,您可以将其加载到视图、控制器和模型中,并使您的视图、控制器和模型对其进行扩展。

例如,名为FooLibin的 libapp/Librairies将是:

namespace App\Libraries;  

  class FooLib {

    public function __construct() {
      // your constructor
    }

    // ...
    
   }
Run Code Online (Sandbox Code Playgroud)

如果你想在 Controller 中调用它:

namespace App\Controllers;

use App\Libraries\FooLib;
use CodeIgniter\Controller;

class FooController extends Controller {

    protected $lib;

    public function __construct() {
        $this->lib = new FooLib();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您的 lib 文件夹在 app 文件夹之外,请确保app/Config/Autoload.php通过修改$psr4变量将其添加到自动加载器中。

$psr4 = [
            'App'         => APPPATH,                // To ensure filters, etc still found,
            APP_NAMESPACE => APPPATH,                // For custom namespace
            'Config'      => APPPATH . 'Config',
            'Libraries'   => APPPATH . 'Libraries'   // Your custom librairies
        ];
Run Code Online (Sandbox Code Playgroud)