一、基本结构

CodeIgniter3.0.0解压后有8个文件,分别是:

  • application:项目文件
  • system:系统(框架)文件,为方便升级,不建议修改
  • user_guid:用户手册,不需要加入项目
  • composer.json:composer配置文件,不需要加入项目
  • contributing.md:如何参与项目贡献代码,不需要加入项目
  • index.php:项目入口文件
  • license.txt:许可文件,不需要加入项目
  • readme.rst:说明文件,不需要加入项目

二、控制器Controller

控制器在application文件夹中的controllers文件夹中,默认控制器为welcome,有4小点需要注意:

1、控制器类名不需要加后缀

2、控制器文件名建议小写

3、控制器要直接或间接继承自CI_Controller类

4、可访问的action方法名不能以下划线开头,且访问权限要是public的

三、视图View

视图在application文件夹中的views文件夹中,几个tips:

1、在控制器中用如下代码加载views中的视图:

//加载views文件夹中的user_index.php视图文件
$this -> load -> view('user_index'); //加载views/user文件夹中的index.php视图文件
$this -> load -> view('user/index');

2、在视图中,可以直接使用原生的php代码

3、在控制器中可以通过以下方式向视图中输出变量:

<?php
class User extends CI_Controller {
public function index() {
$data = array(
'username' => 'jim',
'books' => array(
'a', 'b', 'c', 'd'
)
); $head = array(
'title' => 'TITLE',
'subtitle' => 'SUB TITLE'
); $this -> load -> vars('data', $data);
//公共部分
$this -> load -> view('header');
$this -> load -> view('user/index', $head);
}
}
?>

在视图中用如下方式获取变量:

<!DOCTYPE html>
<html>
<head>
<title>User</title>
</head>
<body>
<h1>User</h1>
<?php var_dump($data); ?>
<?php var_dump($title); ?>
</body>
</html>

四、CI的超级对象

CI中的超级对象即为当前的控制器对象。在视图中也可以直接使用$this访问超级对象。

超级对象提供了很多属性:

1、$this -> load ,装载器,主要提供了如下方法:

  • view:装载视图
  • vars:分配变量到视图
  • database:装载数据库操作对象
  • model:装载模型
  • helper:加载帮助文件

2、$this -> uri,解析URL相关内容,主要提供如下方法:

  segment:按索引(控制器为1)获取分段url值(类pathinfo没有key的模式:入口.php/控制器/动作/参数1/参数2。。。),示例如下

  • <?php
    class User extends CI_Controller { ///index.php/user/index/id/abc/name/god
    public function index($param1, $param2) {
    $param3 = $this -> uri -> segment(5);
    var_dump(array(
    'param1' => $param1,
    'param2' => $param2,
    'param3' => $param3
    ));
    /*
    array (size=3)
    'param1' => string 'id' (length=2)
    'param2' => string 'abc' (length=3)
    'param3' => string 'name' (length=4)
    */
    $this -> load -> view('user/index');
    }
    }
    ?>

3、$this -> input,主要用于取post和server数据,使用方法如下:

<?php
class User extends CI_Controller {
public function index() {
$username = $this -> input -> post('username');
$ip = $this -> input -> server('REMOTE_ADDR');
echo $ip;//127.0.0.1
$this -> load -> view('user/index');
}
}
?>

五、数据库操作

数据配置文件在 application/config/database.php 中。

1、查询示例

<?php
class User extends CI_Controller {
public function index() {
$this -> load -> view('user/index');
} public function showusers() {
$this -> load -> database();
$sql = 'select * from ci_test';
$res = $this -> db -> query($sql);
$users = $res -> result();
var_dump($users);
/*
array (size=1)
0 =>
object(stdClass)[18]
public 'id' => string '1' (length=1)
public 'name' => string 'jim' (length=5)
public 'title' => string 'ci learn' (length=8)
*/ $users2 = $res -> result_array();
/*
array (size=1)
0 =>
array (size=3)
'id' => string '1' (length=1)
'name' => string 'atwal' (length=5)
'title' => string 'ci learn' (length=8)
*/
var_dump($users2); $firstUser = $res -> row();
var_dump($firstUser);
/*
object(stdClass)[18]
public 'id' => string '1' (length=1)
public 'name' => string 'atwal' (length=5)
public 'title' => string 'ci learn' (length=8)
*/
$this -> load -> view('user/show');
}
}
?>

要先调用 $this -> load -> database()进行装载数据库,然后才能使用 $this -> db 对象。

2、插入示例

public function add() {
$this -> load -> database();
$sql = "insert into swap_test(name,title) values ('jim', 'jim learn ci')";
$bool = $this -> db -> query($sql);
if ($bool) {
//受影响行数
echo $this -> db -> affected_rows(); //自增id
echo $this -> db -> insert_id();
}
}

3、参数绑定示例

为了安全,阻止SQL注入,建议用参数绑定的形式操作数据库。

public function addsafe() {
//配置自动加载db
//application\config\autoload.php
//$autoload['libraries'] = array('database');
//$this -> load -> database(); $data[0] = 'lili';
$data[1] = 'lili';
$sql = "insert into swap_test(name,title) values (?,?)";
$bool = $this -> db -> query($sql, $data);
if ($bool) {
//受影响行数
echo $this -> db -> affected_rows(); //自增id
echo $this -> db -> insert_id();
}
}

4、表前缀

为了应对数据库表前缀变化,CI数据库配置(application\config\database.php)中有下面两项:

$db['default'] = array(
'dbprefix' => 'ci_',
'swap_pre' => 'swap_',
);

swap_pre的作用是,在代码中用swap_pre来替换dbprefix,可以达到换数据库表前缀不改代码的目地(即在代码中表前缀用swap_pre值就好)。

5、自动加载db对象

在每次数据库操作前都要加载database才可以使用db对象,显得比较麻烦,可以用CI中的自动加载能力简化这一步:

//配置自动加载db
//application\config\autoload.php
//$autoload['libraries'] = array('database');

配置完后,就可以直接使用$this -> db 对象了。

CodeIgniter学习笔记一:基本结构、控制器、视图、超级对象、数据库的更多相关文章

  1. thinkphp学习笔记1—目录结构和命名规则

    原文:thinkphp学习笔记1-目录结构和命名规则 最近开始学习thinkphp,在下不才,很多的问题看不明白所以想拿出来,恕我大胆发在首页上,希望看到的人能为我答疑解惑,这样大家有个互动,学起来快 ...

  2. Go语言学习笔记十: 结构体

    Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...

  3. matlab学习笔记12_3串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields

    一起来学matlab-matlab学习笔记12 12_3 结构体 串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields 觉得有用的话 ...

  4. matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象

    一起来学matlab-matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matl ...

  5. CodeIgniter学习笔记三:扩展CI的控制器、模型

    一.扩展CI中的控制器 有时需要对CI中的控制器作统一操作,如进行登录和权限验证,这时就可以通过扩展CI控制器来实现. 扩展CI控制器只需要在application/core文件夹中建一个继承自CI_ ...

  6. Solr6.7 学习笔记(01) -- 目录结构

    Solr解压后的目录结构 --contrib: Solr的一些扩展 --analysis-extras: 包含一些文本分析组件及其依赖 --clustering: 包含一个用于集群搜索结果的引擎 -- ...

  7. Android学习笔记(十八)——再谈升级数据库

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 之前我们为了保证数据库中的表是最新的,只是简单地在 onUpgrade()方法中删除掉了当前所有的表,然后强制 ...

  8. Egret学习笔记 (Egret打飞机-5.实现子弹对象)

    上一章把飞机添加到屏幕上,但是飞机要发射子弹对吧?那么这一章我们就来实现一下发射子弹,并实现一个简单的子弹对象池 先来捋一捋思路 1.创建一个子弹对象 2.然后添加一个bitmap,显示子弹贴图 3. ...

  9. [原创]java WEB学习笔记05:Servlet中的ServletConfig对象

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

随机推荐

  1. Apache2.4 authz_core_module模块使用

    Description: Core Authorization Status: Base Moduledentifier: authz_core_module Sourceile: mod_authz ...

  2. POST信息模拟登录获取页面内容

    最近项目里有一个是要模拟登录后,访问固定页面获取内容的要求,一开始用JQ AJAX好像不支持跨域请求.后使用.net中HttpWebRequest对象来获取.一开始访问总是无法在第二个页面正常访问,好 ...

  3. 【[TJOI2018]碱基序列】

    题目 为什么没人用\(SAM\)啊 我们先把原来的模式串建一遍\(SAM\),之后我们就可以求出\(SAM\)上每一个节点的\(|endpos|\)就可以知道每一个子串出现的次数了,也就是在模式串上的 ...

  4. rsync安装配置实时同步

    一.简介 1.认识 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的“Rsync算法”来使本地和远 程两个主 ...

  5. OnCollisionEnter和OnTriggerEnter

    之前对这两个的用法不是特别清楚,重新学习了下,再做个测试看看效果如何: 1.新建一个场景test 2.添加一个cube,点击Inspector面板会发现系统已经默认添加了Box collisder组件 ...

  6. 通过redis实现的一个抢红包流程,仅做模拟【上】

    建议结合下一篇一起看 下一篇 数据结构+基础设施 数据结构 这里通过spring-data-jpa+mysql实现DB部分的处理,其中有lombok的参与 @MappedSuperclass @Dat ...

  7. atoi简析

    原文链接 atoi()函数的功能:将字符串转换成整型数:atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将 ...

  8. alert、confirm、prompt的区别

    我们在开发一些后台管理系统的时候,经常会用到一些弹出框,今天我们一起看一下吧: alert:仅仅是一个提示的作用,通知用户,会阻线程,alert后面的代码,在用户点击确认后仍然会照常执行. confi ...

  9. System.Web.UI.Page

    mdsn:点击查看此类介绍 git:   点击查看封装方法   消息弹框,消息弹框跳转,自定义脚本信息 定义:表示一个从托管 ASP.NET Web 应用程序的服务器请求的 .aspx 文件(也称为 ...

  10. mpvue项目中安装weui

    观察一下发现,mpvue项目打包css的规律是:根组件App.vue里的style样式全部打包到 dist  /  static / css / app.wxss ..   参照微信小程序的原生引入使 ...