资讯专栏INFORMATION COLUMN

CodeIgniter笔记

Michael_Lin / 903人阅读

摘要:移除中的开启的模块,在项目目录中新建文件,添加如下内容获取超级对象使用辅助函数一般情况下,辅助函数位于或者目录目录下。模型命名规则类名的第一个字母必须大写,其余部分小写。文件名和类名应该一致。

移除URL中的index.php

开启Apache的mod_rewrite模块,在项目目录中新建.htaccess 文件,添加如下内容

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
获取CI超级对象
$CI = & get_instance()
$version_id = $CI->config->item("version_id");
使用辅助函数

一般情况下,辅助函数位于 system/helpers 或者 application/helpers 目录 目录下。
加载 URL 辅助函数 ,它的文件名为 xxx_helper.php

public function use_help()
{
    //加载单个
    $this->load->helper("url");
    //加载辅助函数,单个或多个
    // 路径:applicationhelpersdemo_helper.php 和 applicationhelpers	est_helper.php
    // $this->load->helper(["demo","test"]);
    echo site_url();
    echo base_url();
}
扩展辅助函数

要扩展原始的 数组辅助函数 ,首先你要创建一个文件 application/helpers/MY_array_helper.php,然后在文件中添加或重写函数。

https://codeigniter.org.cn/user_guide/general/helpers.html
设置自定义前缀

用于扩展辅助函数的文件名前缀和扩展类库和核心类是一样的。要自定义这个前缀,你可以打开 application/config/config.php 文件然后找到这项:

$config["subclass_prefix"] = "MY_";
使用codeigniter类库

所有的系统类库都位于 system/libraries/ 目录下,大多数情况下,在使用之前, 你要先在 控制器 中初始化它,使用下面的方法

//加载类库
$this->load->library("encrypt");
//使用加载的类库
$tt  =  $this->encrypt->encode("123","132");
创建自己的类库

自定义的类库文件应该放置在 application/libraries 目录下,当你初始化类时,CodeIgniter 会在这个目录下寻找这些类。
备注:

文件名首字母必须大写,例如:Myclass.php
类名定义首字母必须大写,例如:class Myclass
类名和文件名必须一致

例如


使用

public function use_custom_library()
{
    //创建自定义类库
    $this->load->library("someclass");
    echo $this->someclass->some_class(x);//目录:libraries/service/emr.php,例如:$this->load->("service");调用$this->service->emr->some_fun();
}
扩展原生类库

要扩展原生的类库,只需要新建一个文件,以MY_开头继承原类库即可,示例:要扩展原Email类库,只需命名为 application/libraries/MY_Email.php , 然后定义你的类


替换原生类库

要替换原类库文件,只需定义与原生的类库命名完全一样,例如, 要替换掉原生的 Email 类的话,你要新建一个 application/libraries/Email.php 文件, 然后定义定义你的类:


更多参考

https://codeigniter.org.cn/user_guide/general/creating_libraries.html
控制器

控制器文件保存到 application/controllers/ 目录下。
控制器命名规则

1.`文件名`必须是大写字母开头,如:"Demo.php" 。
2.`类名`必须以`大写`字母开头。

示例:

load->view("welcome_message");
   }
}
模型

模型类位于你的 application/models/ 目录下。

模型命名规则

1.类名的第一个字母 必须`大写`,其余部分小写。
2.文件名和类名应该一致。

例如,创建一个Demo_model.php,路径:applicationmodelsDemo_model.php

db->get("demo", 2);
        return $query->result_array();
    }

    /**
     * 插入记录
     */
    public function insert_record($data)
    {
        $this->name = $data["name"];
        $this->age  = $data["age"];
        $this->addr = $data["addr"];

        $this->db->insert("demo", $this);
    }

    /**
     * 更新记录
     */
    public function update_record($data)
    {
        $this->name = $data["name"];
        $this->age  = $data["age"];
        $this->addr = $data["addr"];
        $this->db->update("demo", $this, array("id" => $data["id"]));
    }
}

在控制器调用

class demo extends CI_Controller
{
    public function use_model()
    {
        $data = [
            "name" => "Daiod",
            "age" => 24,
            "addr" => "Chigo",
//            "id" => 8
        ];
        //加载model
        $this->load->model("demo_model");
//        $this->load->model("demo/test","demoModel"); //如果model下有子目录,则$this->load->model("xxx/xxx");
        //给model定义别名
        $this->load->model("demo_model","demoModel");

        //调用model中的方法 $this->model_name->method();
//        $res = $this->demo_model->get_last_two_record();
        $res = $this->demoModel->get_last_two_record();
        print_r($res);
        //插入记录
//        $this->demo_model->insert_record($data);
        //使用demo_model的别名
//        $this->demoModel->insert_record($data);
        //更新
//        $this->demo_model->update_record($data);
    }
}
打印日志

修改config.php文件

/*
|--------------------------------------------------------------------------
| Error Logging Threshold
|--------------------------------------------------------------------------
|
| You can enable error logging by setting a threshold over zero. The
| threshold determines what gets logged. Threshold options are:
|
|  0 = Disables logging, Error logging TURNED OFF
|  1 = Error Messages (including PHP errors)
|  2 = Debug Messages
|  3 = Informational Messages
|  4 = All Messages
|
*/
$config["log_threshold"] = 1; //默认为0,这里修改错误级别 error,debug,info

使用

public function log_write()
{
    //打印日志,与配置文件中设置错误级别对应
    log_message("error", "this is error messages");
    log_message("debug", "this is debug messages");
    log_message("info", "this is debug messages");
    echo "
"; }
数据库操作 配置

配置文件路径:CodeIgniterapplicationconfigdatabase.php
自动连接,需要修改CodeIgniterapplicationconfigautoload.php文件,

$autoload["libraries"] = array();
//修改为
$autoload["libraries"] = array("database");

手动连接

$this->load->database();
操作

查询

public function select()
{
    # 获取表中所有记录
    $query = $this->db->get("demo");
    //等价于
    $query = $this->db->query("select * from demo");
    //返回所有记录的的数组
    $data = $query->result_array();
    //返回所有记录的的数组对象
    $data = $query->result();

    //条件查询
    $data = $this->db->select("name", "addr")
        ->from("demo")
        ->where("name = "xiaoli"")  // ->where("id >=", 1)
        ->limit(2)
        ->order_by("age")
        ->get()
        ->result_array();//返回数组
    //where条件
    //where(array("name"=>"mary", "id >"=>"1")); 表示name字段值是mary并且id字段值是1
    //where("name", "mary")或where("name =", "mary"); 表示查询条件是name字段值是mary

    //row() 只返回一行记录,返回的是一个对象
    $data = $query->row();

    #row_array() 只返回一行记录,返回的是一个数组
    $data = $query->row_array();

    //num_rows() 返回查询结果行数
    $data = $query->num_rows();

    //num_fields() 返回查询请求的字段个数
    $data = $query->num_fields();

    //free_result() 释放当前查询所占用的内存并删除关联资源标识
    $data = $query->free_result();

    print_r($data);
    #返回最后运行的查询Sql语句
    echo $this->db->last_query(); //select * from demo

    #获取插入的自增Id
    echo $this->db->insert_id();

    //写入和更新操作被影响的行数
    echo $this->db->affected_rows();

    //返回指定表的总行数
    echo $this->db->count_all("demo");

    //输出当前的数据库版本号
    echo $this->db->version();

    //输出当前的数据库平台
    echo $this->db->platform(); //mysqli

    //查询语句
    $this->db->select("column1","column2"); //选择查询的字段
    $this->db->get("table_name"); //表示SELECT * FROM table_name
    $this->db->get("table_name", 10, 20); //参数2表示每页记录数(limit),参数3表示偏移(offset),SELECT * FROM table_name LIMIT 20, 10
    $this->db->select_max();//可接受两个参数,参数2表示别名
    $this->db->select_min();//同上
    $this->db->select_avg();//同上
    $this->db->select_sum();//同上
    $this->db->from("table_name");//选择表名
    $this->db->join("table2","table2.pid=table.id","left");//$this->db->from("table1");
    $this->db->get_where();
    //示例
    $this->db->get_where("table_name", array("id" => $id), $limit, $offset);
    $this->db->where("字段","值");// where 字段 = "值";或者where("id >",2);
    $this->db->or_where();//子句OR 连接
    $this->db->where_in("xx",["xx","xx"]);// where_in("username",["Joe","Lucy","Lily"]);
    $this->db->or_where_in("xx",["xx","xx"]);
    $this->db->where_not_in();
    $this->db->or_where_not_in();
    $this->db->like("title","match");// where title like "%match%";参数3表示before(%match),after(match%),none(match)默认为both
    //示例
    $array = array("title" => $match, "page1" => $match, "page2" => $match);
    $this->db->like($array);
    // WHERE title LIKE "%match%" AND page1 LIKE "%match%" AND page2 LIKE "%match%"

    $this->db->or_like(); //OR连接

    $this->db->not_like();
    $this->db->or_not_like();
    $this->db->group_by();
    $this->db->distinct();
    $this->db->having();
    $this->db->or_having();
    $this->db->order_by();
    $this->db->limit();
    $this->db->count_all_results();
}

插入

public function add()
{
    //插入数据,被插入的数据会被自动转换和过滤,例如:
    $data = array("name" => "xiaoming", "age" => 23, "addr" => "chognqing");
    $this->db->insert("demo", $data);//insert_batch()插入多条,$data为二维数组
}

更新

    public function update()
    {
//        $data = array("name" => "xiaoming", "age" => 26, "addr" => "shanghai");
//        $where = "name = "xiaoming"";
//        $this->db->update("demo", $data, $where);//demo为表名
        //或者
//        $this->db->where("id", 6);
//        $this->db->update("demo", $data);
        //或者 $this->db->set("key","value");
        $data = ["name" => "nihao"];
        $bool = $this->db->update("demo", $data, ["id" => 3]); //update_batch()
        //修改id为3的记录name修改为nihao
        var_dump($bool);//成功则返回TURE
    }

删除

    public function del()
    {
//        $this->db->where("id", 6);
//        $this->db->delete("demo");
        //等价于
        $bool = $this->db->delete("demo",array("id"=>5));//返回布尔值

    }
操作session
// 使用session
$this->load->library("session");
// 设置session
$data = array(
    "username"  => "johndoe",
    "email"     => "johndoe@some-site.com",
    "logged_in" => TRUE
);
// 设置时间, 也可在config.php中设置
$this->session->sess_expiration = "14400";
// 仅添加一个值
$this->session->set_userdata("info", $data);
// 添加多个值
// $this->session->set_userdata($data);
// 检查某个 session 值是否存在
$this->session->has_userdata("info");
// 获取session
$info = $this->session->userdata("info");
// or
$info = $this->session->info;
// 删除单个session
$this->session->unset_userdata("info");
// 同时删除多个值
// $array_items = array("username", "email");
// $this->session->unset_userdata($array_items);
操作cookie
// 加载辅助函数
$this->load->helper("cookie");
// 添加cookie
setcookie("name", "lds", 86500);
// or
$this->input->set_cookie("name", "lds", 60);

// 获取cookie
$name = get_cookie("name");

// 删除一条 Cookie
delete_cookie("name");
// 删除多条 Cookie
delete_cookie(["name", "email"]);

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31229.html

相关文章

  • Codeigniter 4.0-dev 版源码学习笔记之三——核心文件 Codeigniter.ph

    摘要:行,是否强制访问。行,尝试处理此次请求,详细见方法。至此,的执行主流程完毕。小结是的核心文件,它被调用后,完成了诸多的主流程操作。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 前言 Codeigniter.php 是 CI 4 的核心所在,在这里接收并处理了 request 请求,安全检查,缓存处理, URL 解析以及路由匹配,执行过滤器,加载运行 Controll...

    alighters 评论0 收藏0
  • Codeigniter 4.0-dev 版源码学习笔记之四——详细路由过程

    摘要:行,判断如果为空,那么返回默认路由。行,把处理完毕后找到的返回。方法该方法是自动按着约定规则去目录去找路由的过程。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 前言 我个人觉得在当前 MVC 流行的架构下,要想去了解一个框架,或者是一个基于此架构下的应用程序,最好的入手方式就是先看路由,虽然路由不是 MVC 里的任何一个,但是知道了路由的来龙去脉就知道了整个框架或者...

    NSFish 评论0 收藏0
  • Codeigniter 4.0-dev 版源码学习笔记之二——入口以及初始化操作

    摘要:通过这个函数可以很方便的在程序运行期间执行很多常见操作。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 index.php index.php 是整个框架的入口文件,也就是说所有的请求都要从它这里开始。因为 index.php 源码非常简洁,那么我们直接放一张源码截图,按着截图说一下源码。 showImg(https://segmentfault.com/img/re...

    _ivan 评论0 收藏0
  • Codeigniter 4.0-dev 版源码学习笔记之一——前言以及 CI 4 预览

    摘要:版权声明可转载,但不论任何媒体都需要在转载前与本人沟通,并在转载时注明出处。的各个核心模块以模块名为目录名分别存储在这个目录下。下一篇文章会涉及到和。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 写在前面: 为什么选择开发过程中的 CI 4 作为源码解读版本:(1)首先我选 CI 是因为它之前的稳定版都是相对比较轻量小巧的,而且可以认为是简单的。(2)为什么没有选...

    MSchumi 评论0 收藏0
  • Codeigniter 4.0-dev 版源码学习笔记之六——控制器

    摘要:控制器严格来说,这个是控制器父类的源码。在中,控制器仅负责接到返回的组装的页面字符串,并回核心中,由核心再处理后续事宜。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 前言 其实一开始我是很纠结是否要写控制器的源码分析的,因为控制器的源码太少了,少到你不相信这是一个 MVC 里的一个重头。直觉里,大家都觉得控制器作为各个请求的入口,其后端应该有很多很多的代码支撑才可以...

    asce1885 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<