CodeIgniter框架学习要点
以下内容从兄弟连的CI教学视频中摘抄:
http://codeigniter.org.cn/tutorials/
-----------------------------------------------------------------------------------------------
Codeigniter框架
-----------------------------------------------------------------------------------------------
讲师:邹义良
微博:weibo.com/it266
-----------------------------------------------------------------------------------------------
主要内容
CI简介
深入MVC设计模式
CI中的控制器与视图
CI中的超级对象
数据库访问
AR模型
如何扩展CI的控制器
url相关函数
设置路由
分页
文件上传
Session
验证码
表单验证
-----------------------------------------------------------------------------------------------
CI是什么?
CodeIgniter是一个轻量级但功能强大的PHP框架
基于MVC设计模式,提供了一套丰富的类库
简单易学,高效实用
官方网站
www.codeigniter.com
中文网站
http://codeigniter.org.cn
下载当前最新版本
CodeIgniter_2.1.4.zip
(截止2015.7.1最新版为3.0.0——笔者注)
有什么特点?
你想要一个小巧的框架
你需要出色的性能
你需要广泛兼容标准主机上的各种 PHP 版本和配置
CI 2.1.4 需要PHP5.1.6
你想要一个几乎只需 0 配置的框架
你想要一个不需使用任何命令符的框架
你想要一个不需坚守限制性编码规则的框架
你不希望被迫学习一门模板语言(虽然可以选择你喜欢的模板解析器)
你不喜欢复杂,热爱简单
你需要清晰,完整的文档
目录结构说明
license.txt 许可协议
user_guide 用户手册
syste 框架核心文件
application 应用目录
index.php 入口文件
-----------------------------------------------------------------------------------------------
MVC
1.入口文件
唯一一个让浏览器直接请求的脚本文件
2.控制器
协调模型和视图
3.模型
提供数据,保存数据
4.视图
只负责显示
表单...
5.动作action
是控制器中的方法,用于被浏览器请求
CI中的MVC
访问url使用的是pathinfo
入口文件.php/控制器/动作
application目录中:
controllers 控制器
models 模型
views 视图
默认控制器是welcome
默认动作是index
控制器
1.不需要加后缀
2.文件名全部小写 例如 user.php
3.所有的控制器,直接或间接继承自CI_Controller类
4.控制器中,对动作(方法)要求:
public
不能以_开头
视图
1.在控制器中如果加载视图
//直接写视图名字,不写扩展名,如果有子目录,则写上目录名
2.视图中,直接使用原生PHP代码
3.推荐使用
=$item['name']?>
超级对象
当前的控制器对象
提供了很多属性:
$this->load
装载器类的实例 system/core/loader.php
装载器类提供的方法:
view() 装载视图
vars() 分配变量到视图
database() 装载数据库操作对象
model() 装载模型对象
helper()
$this->uri
是CI_URI类的实例 system/core/URI.php
CI_URI类提供的方法:
segment()用于获取uri中的参数
传统的:入口文件.php/控制器/动作/参数1/值1/参数2/值2
入口文件.php/控制器/动作/值1/值2
echo $this->segment(3);//值1
echo $this->segment(4);//值2
//index.php/控制器/index/6
public function index($p=0){ echo $p;//输出6
}
$this->input
输入类
是CI_URI类的实例 system/core/input.php
CI_URI类提供的方法:
$this->input->post('username'); //等价于$_POST['username'];
$this->input->server('DOCUMENT_ROOT'); //等价于$_SERVER['DOCUMENT_ROOT'];
$this->input->server('REMOTE_ADDR');
在视图中,直接用$this来访问超级对象中的属性
数据库访问
修改配置文件
application/config/database.php
将数据库访问对象 装载到超级对象的属性中 $this->db
$this->load->query($sql);//返回对象
$res=$this->db->query($sql);//返回对象
$res->result();//返回数组,数组中是一个一个的对象
$res->result_array();//返回二维数组,里面是关联数组
$res->row()//返回第一条数据,直接是一个对象
参数绑定
$sql="select * from blog_user where name=?";
$this->db->query($sql,$name);//如果有多个问号时,需要传入一个索引数组
表前缀
$db['default']['dbprefix'] = 'new_';
$db['default']['swap_pre'] = 'swap_';
配置为一样,代码中,直接硬编码表前缀就行了,如果以后项目数据库表前缀发生变化,
只需要修改$db['default']['dbprefix'] = 'new_';代码中的swap_会自动替换为new_
db的自动加载
application\config\autoload.php
$autoload['libraries'] = array(database);
不需要:$this->load->database();
取自增id
$this->db->insert_id();
受影响行数
$this->db->affected_rows();
Active record
1.application/config/database.php
确保$active_record = TRUE;
2.application/config/autoload.php
$autoload['libraries'] = array(database);
3.在配置文件中,正确配置表前缀后,会自动添加
$res->$this->db->get('表名');//返回结果集对象
$res->result();
$bool=$this->db->insert('表名',关联数组);
$bool=$this->db->update('表名',关联数组,WHERE条件);
$bool=$this->db->delete('表名',WHERE条件);
//select uid,username from user where uid>=3 order by uid desc limit 2,3
$res=$this->db->select('uid,username')
->from('user')
->where('uid >=',1)
->limit(3,2)//跳过2条,取出3条数据
->order_by('uid desc')
->get();
//显示最进一条sql语句
echo $this->db->last_query();
//where
//$res=$this->db->where('username','marry')->get('user');
//$res=$this->db->where('username !=','marry')->get('user');
//$res=$this->db->where('username','marry')->get('user');
$res=$this->db->where(array('username'=>'hanyile','uid 3))->get('user');
echo $this->db->last_query();
复杂的查询请用$this->db->query($sql,$data);//使用问号绑定查询

负载均衡会影响会话管理,但可以通过会话复制、会话粘性和集中式会话存储解决。1.会话复制在服务器间复制会话数据。2.会话粘性将用户请求定向到同一服务器。3.集中式会话存储使用独立服务器如Redis存储会话数据,确保数据共享。

Sessionlockingisatechniqueusedtoensureauser'ssessionremainsexclusivetooneuseratatime.Itiscrucialforpreventingdatacorruptionandsecuritybreachesinmulti-userapplications.Sessionlockingisimplementedusingserver-sidelockingmechanisms,suchasReentrantLockinJ

PHP会话的替代方案包括Cookies、Token-basedAuthentication、Database-basedSessions和Redis/Memcached。1.Cookies通过在客户端存储数据来管理会话,简单但安全性低。2.Token-basedAuthentication使用令牌验证用户,安全性高但需额外逻辑。3.Database-basedSessions将数据存储在数据库中,扩展性好但可能影响性能。4.Redis/Memcached使用分布式缓存提高性能和扩展性,但需额外配

Sessionhijacking是指攻击者通过获取用户的sessionID来冒充用户。防范方法包括:1)使用HTTPS加密通信;2)验证sessionID的来源;3)使用安全的sessionID生成算法;4)定期更新sessionID。

本文比较了PHP和ASP.NET,重点是它们对大规模Web应用程序,性能差异和安全功能的适用性。两者对于大型项目都是可行的,但是PHP是开源和无关的,而ASP.NET,


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Dreamweaver CS6
视觉化网页开发工具

WebStorm Mac版
好用的JavaScript开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。