nguyenanhung/codeigniter-framework

CodeIgniter 框架 - v3.2.0

v3.2.0.36 2024-09-21 20:25 UTC

README

Latest Stable Version Total Downloads Daily Downloads Monthly Downloads License PHP Version Require

重新打包 CodeIgniter 的 system framework 目录,使用与 Composer 和 PHP 7、PHP 8 兼容的方式

v3.2.0 版本开始 - 框架完全兼容 PHP 8.2 版本

此打包版本会持续更新来自原始 CodeIgniter3 分支的新功能。因此,它将不断更新错误修复和新功能

目录

主要功能

添加了一些扩展库和助手

  • 带有许多受保护的方法的 Base Controllers
  • 支持 HMVC 模型
  • 支持 RESTful Web 服务
  • 支持 Queue Worker
  • 支持 MongoDB 数据库
  • 支持 Elasticsearch:使用第三方软件包 "elasticsearch/elasticsearch": "^8.0 || ^7.0 || ^6.0 || ^5.0"
  • 支持具有足够使用 SQL 的基本函数的 Base Model 类
  • 支持 ORM Model 类,提供一种简单且易于查询的方法
  • 通过函数 ResponseOutput::writeLn($message) 在 CLI 界面上支持输出响应
  • 添加了预定义的 HTTP 状态码的 StatusCodes 类,例如 StatusCodes::HTTP_OK。详细信息请参考 StatusCodes
  • 通过 Composer 预先安装 nguyenanhung/codeigniter-basic-helper 包添加了许多有用的助手

将包安装到项目中的指南

  1. 使用以下命令将包安装到项目中:
composer require nguyenanhung/codeigniter-framework
  1. 更新 index.php 文件

查找以下行:

/*
 *---------------------------------------------------------------
 * SYSTEM DIRECTORY NAME
 *---------------------------------------------------------------
 *
 * This variable must contain the name of your "system" directory.
 * Set the path if it is not in the same directory as this file.
 */
	$system_path = 'system';

更改为以下内容:

/*
 *---------------------------------------------------------------
 * SYSTEM DIRECTORY NAME
 *---------------------------------------------------------------
 *
 * This variable must contain the name of your "system" directory.
 * Set the path if it is not in the same directory as this file.
 */
	$system_path = '/your_vendor_path/nguyenanhung/codeigniter-framework/system';
  1. 从项目根目录中删除 system 目录以节省空间

使用指南

编写继承 Base Controller 的 Controller 指南

在库中已构建了一个 Base Controller,继承方式如下:

  1. 根据 CodeIgniter 3 文档创建一个新的 Controller
  2. HungNG_CI_Base_Controllers 继承类而不是 CI_Controller,例如:
<?php
/**
 * Class Hungna_test
 *
 * @author    713uk13m <dev@nguyenanhung.com>
 * @copyright 713uk13m <dev@nguyenanhung.com>
 */
class Hungna_test extends HungNG_CI_Base_Controllers
{
	public function __construct()
    {
        parent::__construct();
    }
  	
  	public function index()
    {
		echo "This is ".get_class($this); // show: This is Hungna_test
		exit();
    }
}

编写运行 Queue Worker 的 Controller 指南

在库中已构建了一个 Base Queue Worker(由 yidas 构建),继承方式如下:

  1. 根据 CodeIgniter 3 文档创建一个新的 Controller
  2. HungNG_CI_Base_Queue_Worker 继承类而不是 CI_Controller,例如:
<?php
/**
 * Class My_worker
 *
 * @author    713uk13m <dev@nguyenanhung.com>
 * @copyright 713uk13m <dev@nguyenanhung.com>
 */
class My_worker extends HungNG_CI_Base_Queue_Worker
{
    // Initializer
    protected function init() {}
    
    // Worker
    protected function handleWork() {}
    
    // Listener
    protected function handleListen() {}
}

有关详细信息,请参阅此处文档:[链接](https://github.com/nguyenanhung/codeigniter-framework-sample/tree/main/codeigniter-queue-worker)

编写运行 RESTful API Service 的 Controller 指南

在已构建的库中已经构建了一个Base RESTful(由yidas构建),继承如下

  1. 根据 CodeIgniter 3 文档创建一个新的 Controller
  2. HungNG_CI_Base_REST继承类而不是从CI_Controller,例如如下
<?php
/**
 * Class My_rest_api
 *
 * @author    713uk13m <dev@nguyenanhung.com>
 * @copyright 713uk13m <dev@nguyenanhung.com>
 */
class My_rest_api extends HungNG_CI_Base_REST
{
    public function index()
    {
        return $this->response->json(['bar'=>'foo']);
    }
    
	public function store($requestData=null) {
	
	    $this->db->insert('mytable', $requestData);
	    $id = $this->db->insert_id();
	    
	    return $this->response->json(['id'=>$id], 201);
	}
}

了解更多详细信息,请参阅此处文档:https://github.com/nguyenanhung/codeigniter-framework-sample/tree/main/codeigniter-rest

编写继承 Base Model 的 Model 指南

  1. 根据CodeIgniter 3文档构建一个模型
  2. HungNG_Custom_Based_model继承类而不是从CI_Model,例如如下
<?php
defined('BASEPATH') or exit('No direct script access allowed');

/**
 * Class Credentials_model
 *
 * @author    713uk13m <dev@nguyenanhung.com>
 * @copyright 713uk13m <dev@nguyenanhung.com>
 * @property \CI_DB_query_builder $db
 */
class Credentials_model extends HungNG_Custom_Based_model
{
    const IS_ACTIVE = 1;
    const ROLE_PUSH = 1;
    const ROLE_PULL = 2;
    const ROLE_FULL = 3;

    protected $fieldUsername;
    protected $fieldStatus;
    protected $fieldRole;

    /**
     * Credentials_model constructor.
     *
     * @author   : 713uk13m <dev@nguyenanhung.com>
     * @copyright: 713uk13m <dev@nguyenanhung.com>
     */
    public function __construct()
    {
        parent::__construct();
        $this->db            = $this->load->database('default', true, true);
        $this->tableName     = 'credentials';
        $this->primary_key   = 'id';
        $this->fieldUsername = 'username';
        $this->fieldStatus   = 'status';
        $this->fieldRole     = 'role';
    }
}

编写继承 Base ORM Model 的 Model 指南

  1. 此包增加了一种编写模型的方法,采用类似于Laravel Eloquent ORM和Yii2 Active Record的Elegant patterns ORM风格(由yidas构建)
  2. 请在此处阅读有关如何集成和部署的详细文档,包括直观和具体的示例:https://github.com/nguyenanhung/codeigniter-framework-sample/tree/main/codeigniter-orm-model

基本SEO集成指南

  1. 此包增加了一个简单的SEO库和helper
  2. 请在此处阅读有关如何集成和部署的详细文档,包括直观和具体的示例:https://github.com/nguyenanhung/codeigniter-framework-sample/blob/main/codeigniter3-basic-seo/README.md

指导在项目中使用 MongoDB 数据库

  1. 默认情况下,CodeIgniter v3不支持MongoDB。然而,这并不会限制,因为CodeIgniter是一个开源框架,所以我增加了一个库来支持调用、交互和处理MongoDB数据库,其使用方法也与CodeIgniter的Query Builder类似
  2. 请在此处阅读有关如何集成和部署的详细文档,包括直观和具体的示例:https://github.com/nguyenanhung/codeigniter-framework-sample/tree/main/codeigniter-mongodb

指导在项目中使用 Elasticsearch

  1. 默认情况下,CodeIgniter v3不支持Elasticsearch。然而,这并不会限制,因为CodeIgniter是一个开源框架,所以我增加了一个库来支持调用和操作Elasticsearch
  2. 请在此处阅读有关如何集成和部署的详细文档,包括直观和具体的示例:https://github.com/nguyenanhung/codeigniter-framework-sample/tree/main/codeigniter-elasticsearch

集成HMVC模型到项目的指南

  1. application目录下创建一个modules文件夹。请参考modules-samples的目录结构https://github.com/nguyenanhung/codeigniter-framework-sample/tree/main/modules-sample
.
└── modules
    └── startup
        ├── config
        │   ├── index.html
        │   └── routes.php
        ├── controllers
        │   ├── Startup.php
        │   └── index.html
        ├── index.html
        ├── models
        │   ├── Startup_model.php
        │   └── index.html
        └── views
            └── index.html

6 directories, 8 files
  1. 创建一个名为hmvc.php的文件,内容如下
<?php
defined('BASEPATH') or exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| HMVC settings
| -------------------------------------------------------------------------
| See: https://github.com/nguyenanhung/CodeIgniter-HMVC
|
*/
$config['modules_locations'] = array(
    APPPATH . 'modules/' => '../modules/'
);
  1. config.php文件中加载hmvc.php文件
require_once __DIR__ . '/hmvc.php';
  1. application/core/目录下创建一个名为MY_Loader.php的文件,内容如下
<?php
defined('BASEPATH') or exit('No direct script access allowed');
/**
 * Class MY_Loader
 *
 * @author    713uk13m <dev@nguyenanhung.com>
 * @copyright 713uk13m <dev@nguyenanhung.com>
 */
class MY_Loader extends HungNG_Loader
{

}
  1. application/core/目录下创建一个名为MY_Router.php的文件,内容如下
<?php
defined('BASEPATH') or exit('No direct script access allowed');
/**
 * Class MY_Router
 *
 * @author    713uk13m <dev@nguyenanhung.com>
 * @copyright 713uk13m <dev@nguyenanhung.com>
 */
class MY_Router extends HungNG_Router
{

}
  1. 在新的modules目录中编写代码,例如如下
<?php
defined('BASEPATH') or exit('No direct script access allowed');
/**
 * Class TestModule
 *
 * @author    713uk13m <dev@nguyenanhung.com>
 * @copyright 713uk13m <dev@nguyenanhung.com>
 */
class TestModule extends HungNG_CI_Base_Module
{
	public function __construct()
    {
        parent::__construct();
    }
  	
	public function index()
    {
		echo "This is ".get_class($this); // show: This is TestModule
		exit();
    }
}

指导检查项目中的文件名是否符合 CodeIgniter 标准

  1. 此控制器检查CodeIgniter 3.0类文件名。
  2. 请在此处阅读有关如何集成和部署的详细文档,包括直观和具体的示例:https://github.com/nguyenanhung/codeigniter-framework-sample/tree/main/codeigniter3-filename-checker

指导记录 CodeIgniter 中的所有查询并记录每个查询的执行时间

  1. 默认情况下,CodeIgniter v3不支持记录查询的执行时间。然而,可以使用Hooks来实现这一点
  2. 请在此处阅读有关如何集成和部署的详细文档,包括直观和具体的示例:https://github.com/nguyenanhung/codeigniter-framework-sample/tree/main/codeigniter-log-all-queries

CodeIgniter 基本助手

  • 多年来使用CodeIgniter编程,我已经收集、构建和编写了许多helper,我将它们打包成nguyenanhung/codeigniter-basic-helper包,并将其集成到这个包中。
  • 这个helper包目前正在由我进行维护和开发,每天都会进行更新,集成此包中的函数的项目数量已经达到数千个。
  • 关于这个helper包的更详细信息,请访问https://github.com/nguyenanhung/codeigniter-basic-helper

联系方式