一达 / codeigniter-psr4-autoload
CodeIgniter 3 应用程序的 PSR-4 自动加载器
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-09-06 18:12:40 UTC
README
CodeIgniter PSR-4 自动加载
CodeIgniter 3 应用程序的 PSR-4 自动加载器
此 PSR-4 扩展已收集到yidas/codeigniter-pack中,这是 Codeigniter 框架的完整解决方案。
功能
-
PSR-4 命名空间支持,如 Yii2 & Laravel 优雅的模式
-
轻松使用 接口、特质、抽象类和扩展类
-
整个 Codeigniter 应用程序目录结构支持
概述
演示
默认情况下,Codeigniter 中所有以 app
前缀的 PSR-4 命名空间都与应用程序目录相关联。
- 类
/application/libraries/MemberService.php
可以通过以下方式调用
new \app\libraries\MemberService;
- 具有
static run()
方法的类/application/services/Process.php
可以通过以下方式调用
\app\services\Process::run();
- 可以以标准方式扩展或实现类
class Blog_model extends app\models\BaseModel {} class Blog extends app\components\BaseController {} class Car implements app\contracts\CarInterface {}
要求
此库需要以下内容
- PHP 5.3.0+
- CodeIgniter 3.0.0+
安装
在 \application
文件夹下的 Codeigniter 项目中运行 Composer
composer require yidas/codeigniter-psr4-autoload
检查 Codeigniter application/config/config.php
$config['composer_autoload'] = TRUE;
您可以将供应商路径自定义到
$config['composer_autoload']
使用方法
安装后,命名空间前缀 app
用于当前 Codeigniter 应用程序目录。
静态类
在 application
目录下创建一个名为 helpers
的新辅助文件夹,例如 \application\helpers\
<?php namespace app\helpers; class ArrayHelper { public static function indexBy($input) {} }
然后在控制器操作中调用它
<?php use app\helpers\ArrayHelper; ... ArrayHelper::indexBy($input); \app\helpers\ArrayHelper::indexBy($input);
扩展类
在 application
目录下创建一个具有 PSR-4 命名空间的类,例如 application/model/BaseModel.php
<?php namespace app\models; class BaseModel extends \CI_Model {}
然后定义一个类以扩展上述类,例如 application/model/My_model.php
<?php class My_model extends app\models\BaseModel {}
在这种情况下,Codeigniter 的
My_model
无法使用 PSR-4 命名空间。
接口
在 application
目录下创建一个名为 interface
的新接口文件夹,例如 application/interface/CarInterface.php
<?php namespace app\interfaces; interface CarInterface {}
然后将接口应用于一个类,例如 application/libraries/Car.php
<?php namespace app\libraries; class Car implements \app\interfaces\CarInterface {}
在这种情况下,可以使用
new \app\libraries\Car;
调用Car
库。
特质
在 application
目录下创建一个特质,例如 application/libraries/LogTrait.php
<?php namespace app\components; trait LogTrait {}
然后将特质注入到类中,例如 application/controller/Blog.php
class Blog extends CI_Controller { use \app\components\LogTrait; }
抽象类
在 application
目录下创建一个抽象类,例如 application/libraries/BaseController.php
<?php namespace app\components; abstract class BaseController extends \CI_Controller {}
然后定义一个类以扩展上述抽象类,例如 application/libraries/BaseController.php
class Blog extends app\components\BaseController {}
概念
Codeigniter 加载器是加载一次性实例化组件的良好实践,就像 Yii2 应用程序组件一样,但它缺少类映射,这使得加载类包括接口、特质、抽象类或扩展类变得不方便。
因此,您可以定义具有 PSR-4 命名空间的类,即使这些类不是组件类型,甚至是一些辅助类,您可能想要使用静态方法和自定义类名。
限制
命名空间类不再支持 CI_Loader
被调用的类需要定义命名空间以支持 PSR-4 自动加载,这意味着它将不再支持内置的 CI_Loader。