一达/codeigniter-psr4-autoload

CodeIgniter 3 应用程序的 PSR-4 自动加载器

2.0.0 2019-07-13 17:24 UTC

This package is auto-updated.

Last update: 2024-09-06 18:12:40 UTC


README

CodeIgniter PSR-4 自动加载


CodeIgniter 3 应用程序的 PSR-4 自动加载器

Latest Stable Version License Total Downloads Monthly Downloads

此 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。