0

0

CodeIgniter学习笔记 Item6--CI中的常规主题

黄舟

黄舟

发布时间:2016-12-29 10:30:17

|

1446人浏览过

|

来源于php中文网

原创

1. 扩展控制器

ci的控制器默认继承自ci_controller
,如果要扩展控制器,需要定义一个从ci_controller
派生的控制器,所有的自定义控制器都继承这个新控制器。

在application/core目录下,有与system目录下类似的目录结构,比如core、helpers、language、libraries目录,扩展控制器就是在application/core目录下自定义控制器,该控制器类从ci_controller继承,类似的,如果要扩展系统的功能,就在application下的对应目录新增自定义类,从系统类继承。

[code]


之后,将所有添加的控制器都从MY_Controller
派生,通过在MY_Controller
中重写父类方法来实现扩展控制器。

在application/config/config.php文件中,有这样一个配置项

[code]$config['subclass_prefix'] = 'MY_';

CI在查找扩展类,会根据这里的前缀去查找并包含定义类文件,此处前缀不区分大小写

2. CI中的URL

当PHP程序部署在服务器上时,用户会将程序安装到指定目录,程序员无法预先知道用户会安装到哪个目录,因此对于代码中出现的URL不能写死,需要通过URL辅助函数动态获取,在使用函数前需要先加载URL辅助函数库($this->load->helper('url'))
或配置/application/config/autoload.php自动加载。

site_url()
:返回以config.php中指定的base_url
和index.php,还有传递给函数的URL段参数拼接成的字符串

[code]
  
     
      
 Document 
  
      
 
method="post"> name:
password:

base_url():返回项目的基础目录

[code]upload/qe.jpg">

current_url():返回当前查看页面的完整URL

3.CI中的路由

路由用于配置针对某些URL与项目中实际文件的对应关系,是的URL看起来更符合用户的习惯,又不用改变项目现有的结构,路由的配置文件是/application/config/routes.php,可以设置默认控制器和404错误页面

[code]$route['default_controller'] = 'welcome'; $route['404_override'] = '';

更重要的功能是,如果我们要实现通过/index.php/news/4.html访问/index.php/article/show/1这样一个需求,可以在routes.php定义路由关系,将原始的URL转换成需要样式

[code]$route['news/([\d]+)\.html] = 'article/show/$1';

这样对于所有负责正则表达式的URL,都会路由到新的路径,其中$1
表示正则表达式中的第一个 

用()括起来的部分

4.CI中的分页

首先加载分页类

[code]$this->load->library('pagination');

然后设置分页属性

[code]// 每页显示的数量 
$config['page_size'] = 10; 
// 总数据量 
$config['total_rows'] = 200; 
// 设置分页跳转页面的基础地址 
$config['base_url'] = site_url('index.php/user/test'); 
// 设置分页显示文字 
$config['first_link'] = '首页'; 
$config['next_link'] = '下一页'; 
$config['prev_link'] = '上一页'; 
$config['last_link'] = '末页';

初始化分页类

[code]$this->pagination->initialize($config);

创建链接并传递给视图

[code]$data['links'] = $this->pagination->create_links(); $this->load->view('test', $data);

通过URL获取偏移量拼装查询

[code]$offset = (int)$this->load->uri->segment(3); $sql = "SELECT * FROM blog_user limit $offset, $page_size";

5.CI中的文件上传

Anyword
Anyword

AI文案写作助手和文本生成器,具有可预测结果的文案 AI

下载

首先通过控制器的方法跳转至视图

[code]public function file() {     $this->load->helper('url');     $this->load->view('file'); }

在视图中创建一个表单用于选择并上传文件

[code] 
 
     
     
Document 
 
     

其中,要注意第一个input的name属性,这个属性后面要用,在表单中将action设置为一个控制器方法,编写对应的控制器方法

[code]
public function upload() 
{     
// 上传文件到服务器目录     
$config['upload_path'] = './upload';     
// 允许上传哪些类型     
$config['allowed_types'] = 'gif|png|jpg|jpeg';     
// 上传后的文件名,用uniqid()保证文件名唯一     
$config['file_name'] = uniqid();     
// 加载上传库     
$this->load->library('upload', $config);     
// 上传文件,这里的pic是视图中file控件的name属性     
$result = $this->upload->do_upload('pic');     
// 如果上传成功,获取上传文件的信息     
if ($result)      
{         
var_dump($this->upload->data());     
} 
}

这样就完成文件上传了

6.CI中的Session

CI默认没有启动Session,而是用Cookie代替Session,首先Cookie只能保存4KB的数据,其次,在Session中保存数据马上就可以获取到,而Cookie中的数据要等到下次客户端请求时才能获取到。

首先加载Session类

[code]$this->load->library('session');

然后通过set_userdata方法以键值对或关联数组的方式保存数据

[code]$user = array('id' => 3, 'name'=>'dj'); $this->session->set_userdata('user', $user);

用userdata方法获取数据

[code]$user = $this->session->userdata('user');

用unset_userdata方法删除数据

[code]$this->session->unset_userdata('user');

如果要保存的数据只需要用一次,可以使用闪出数据,这种数据只对下次服务器请求可用,然后会自动清除,闪出数据用set_flashdata()方法设置

[code]$this->session->set_flashdata('user', $user);

7.CI中的验证码

首先需要在入口文件的同级目录文件夹用于保存验证码图片,比如新建captcha目录

加载captcha辅助类

[code]$this->load->helper('captcha');

调用create_captcha函数生成验证码图片

[code]$this->load->helper('url'); 
$vals = array     
(        
 // 验证码文字,默认是8位随机字符串         
 'word' => 'Random word',         
 // 图片保存路径         
 'img_path' => './captcha/',         
 // 基础目录URL         
 'img_url' => base_url() . './captcha',         
 // 图片中的字体使用的字体文件         
 'font_path' => './path/to/fonts/texb.ttf',         
 // 图片大小         
 'img_width' => '150',         
 'img_height' => 30,         
 // 指定了验证码图片的超时删除时间(秒),默认2小时         
 'expiration' => 30     ); 
 $cap = create_captcha($vals);

此外,还可以设置字符串长度、颜色、字体大小、可选字符,返回值包括了生成图片的名称、完整的img标签、验证码字符串

由于CI不是PHP的session,因此对于验证码的验证过程可以直接使用PHP的session进行保存

[code]session_start(); $_SESSION['cap'] = $cap['word'];

然后使用用户的输入与session中的值进行比较就可以了

 以上就是CodeIgniter学习笔记 Item6--CI中的常规主题的内容,更多相关内容请关注PHP中文网(www.php.cn)!

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

0

2026.01.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

20

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

62

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

87

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

19

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

160

2026.01.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CodeIgniter3(CI3)基础教程(全)
CodeIgniter3(CI3)基础教程(全)

共37课时 | 4.7万人学习

Codeigniter 3 中文开发手册
Codeigniter 3 中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号