Skip to content

fanqingxuan/ci3-skeleton

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于CodeIngiter3.1.13版本开发的一个项目骨架,环境要求php5.6以及以上

本项目只对CodeIngiter做增强,不修改system目录任何代码

优化日志

  • 在原有日志级别info、error、debug基础上又增加了warn级别
  • 公共日志函数支持写warn日志,log_message("warn",$message),自动将日志写入logs/framework目录
  • 支持为每条日志写入关键字,便于根据关键字快速过滤日志
  • 每个请求的多条日志记录相同的requestId,便于根据requestId快速过滤当次请求的所有日志
  • 提供了更友好的日志类,$message可以是标量字符串、数字等,也可以是数组
JLog::debug($keywords,$message)
JLog::info($keywords,$message)
JLog::warn($keywords,$message)
JLog::error($keywords,$message)
  • 调用Log类写入的日志记录在logs/app目录,是我们的业务日志;log_message公共函数写入的日志记录在logs/framework目录,这个是系统日志,将两者分开可以,便于日志的管理,以及问题的快速定位
  • 日志级别和基础框架一样由config.php文件的log_threshold管控
# JLog::warn('warn关键字',"这是错误消息")
634684d781b4d | WARN | 2022-10-12 11:11:07 | warn关键字 | 这是错误消息
# JLog::warn('error关键字',"error内容")
634684d781b4d | ERROR | 2022-10-12 11:11:51 | error关键字 | error内容

添加了service层

  • 使用方法

在controller里面使用方法$this->load->service()

$this->load->service("UserService")
$this->UserService->getUserList();
  • service文件存储规则

一个service文件就是一个类,文件名和类名一致,通常以Service结尾,跟其他用途的类文件区分开来,如UserService.php,service文件存储在models/service目录,service类继承自core/MY_Service

// models/UserService.php
class UserService extends MY_Service {

    public function getUserList() {
        // todo something
    }
}

添加了dao层

个人很难接受对db的操作写在model里面,对db的操作应该写在dao里面更合适一点,由controller调用service,service调用dao层,当然如果项目不复杂,可以直接controller调用dao

  • 使用方法

在service或者controller里面使用方法$this->load->dao()

$this->load->dao("UserDao")
$this->UserDao->getUserList($where);
  • dao文件存储规则

一个dao文件也是一个类,文件名和类名一致,通常以Dao结尾,主要目的也是跟其他用途的类文件区分开来,如UserDao.php,dao文件存储在models/dao目录,dao类继承自core/MY_Dao

// models/UserDao.php
class UserDao extends MY_Dao {

    public function getUserList($where) {
        $query = $this->db->query("YOUR QUERY");
        return $query->result_array();
    }
}

优化控制器

  • 为了跟Service、Dao等用户的文件名规则保持一致,所以controller名以及类名做了调整,文件名为xxxController,action操作名称跟之前一样;
//controllers/HelloController.php
class HelloController extends MY_Controller {

    public function show() {
        //todo something
    }
}

注意文件名的改动不影响config/routes.php文件的路由配置规则

$route['default_controller'] = 'hello';

$route['home'] = 'hello/index';
  • MY_Controller控制器提供了success()error()两个快捷方法,返回标准json格式(根字段仅仅包括code、message、data三个字段)
<?php
class HelloController extends MY_Controller {
    
    function index() {
        //{"code":0,"data":[1,2,3],"message":"\u83b7\u53d6\u6570\u636e\u6210\u529f"}
        $this->success([1,2,3],'获取数据成功');
    }

    function show() {
        //{"code":404,"data":[],"message":"Id\u4e0d\u5b58\u5728"}
        $this->error(404,'Id不存在');
    }
}
>

其它推荐

vscode有个插件PHP intellisense for codeigniter,可以智能提示codeigniter的方法,包括load的方法、db等, model、service、dao在load后,可以智能提示load的类的公共方法、属性

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published