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中的文件上传

Cutout.Pro
Cutout.Pro

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

9

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

10

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

3

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

17

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

19

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
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号