CodeIgniter框架

CodeIgniter是一个轻量级的PHP MVC框架,本文详细介绍了其目录结构、MVC模式、控制器、视图加载、超级对象、数据库访问、Active Record、模型、URL处理、分页、文件上传、session管理、验证码和表单验证等功能。通过实例展示了如何使用CodeIgniter进行开发,包括配置数据库、使用助手函数、创建控制器和模型,以及实现数据查询和表单验证等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于MVC的轻量级PHP框架

【CI目录框架】

License.txt许可协议 、user_guide用户手册 、 system框架核心文件、 application应用目录、 index.php 入口文件

【MVC】

  1. 入口文件:唯一一个让浏览器直接请求的脚本
  2. 控制器controller:协调模型和视图
  3. 视图view:只负责显示
  4. 动作action:是控制器中的方法,用于被浏览器请求。

【CI的MVC】

访问URL使用的是pathinfo形式  入口文件.php/控制器/动作

Application目录:

         Controller控制器

         Models 模型

         View 视图

默认控制器是welcome

默认动作是action

【CI中的控制器】

命名风格:尽量使用全小写 例如user.php

不需要添加后缀

所有的控制器需要直接或者间接继承CI_Controller类

只有public的方法才能作为动作,且动作的方法不能一下划线进行开头

与类名相同的方法,会被PHP当做构造方法,相当于__controller()

【CI中加载视图】

1)在控制器中加载视图$this->load->view(“视图”);直接写视图名,不写扩展名,如果有子目录,则写上目录名

2)视图中直接使用PHP原生代码,不用模板

3)视图分配变量$this->load->vars(‘dom类型’,’内容’);或者将关联数组$adta=[]; 直接传入参数$this->load->vars($data);可以多次调用

4)推荐使用:

         <?php foreach($list as $var):?>

         <?=$var[‘name’]?>

         <?php endforeach;?>

【CI超级对象】

CI的超级对象即当前的控制器对象。提供了很多属性:

(1)$this->load装载器类的实例 /system/core/Loader.php

      1)CI会自动实例化一个CI_Loader对象,放在超级对象的属性中。类似于$obj=new CI__Loader();$this->load=$obj;但实际并不是这样子的。

         2)装载器类提供的方法:view()装载视图、vars()分配变量到视图、database()装载数据库操作对象、model()装载模型操作对象、helper()装载帮助函数

(2) $this->uri是CI_URI类的实例/system/core/URI.php

          CI_URI提供的方法:segment(n)用于获取URL中第n段的值。此时的URL:入口文件.php/控制器/动作/值1/值2.而传统的URL为:入口文件.php/控制器/动作/参数1/值1/参数2/值2..。。。get方式的传值用segment进行获取$this->segment(3);//值1   $this->segment(4);//值2

(3)$this->input输入类CI_Input的实例system/core/Input.php

         提供的方法:$this->input->post(“user_name”);//$_POST[“username”];

                  $this->input->server(“DOCUMENT_ROOT”);//$_SERVER[“DOCUMENT_ROOT”];

         在视图中直接用$this访问超级对象即可。

【CI访问数据库】

数据库操作:

  1. 修改配置文件,application/config/database.php配置需要的参数
  2. 装载数据库操作类$this->load->database();
  3. 装载数据成功后,会放入超级对象的属性中,默认属性名是db
  4. $res=$thus->db->query();执行MySQL语句,返回的是一个对象
  5. $res->result();得到数据结果,返回的是数组,里面是一个一个的对象。$res->result_asrray();返回二维数组,里面是关联数组。$res->row();返回第一条数据,直接是一个对象。

参数绑定:

         $sql=”select * from blog_user where name=?”;

         $this->db->query($sql,$name);//如果有多个问号,需要传入一个索引数组

表前缀:

         修改配置文件中:$db[“default”][“swap_pre”]=”blog_”;

$db[“default”][“dbprefix”]=”blog_”;配置为一样的,代码中只要直接硬编码表前缀就行了,如果以后项目中表前缀发生变化,只需要修改$db[“default”][“dbprefix”]=”new_”;代码中的blog会自动替换为new_

Db的自动加载application/config/autoload.php 中

$autoload[“library”]=array(“database”);就不需要$this->load->database();

【AR模型Active Record】

         查询:

  1. application/config/database.php中进行配置$active_record=TRUE;
  2. 在配置文件中配置表前缀后,会自动添加$res=$this->db->get(“表名”);//返回结果对象,然后进行$res->result();

插入:$bool=$this->db->insert(“表名”,关联数组);

更新:$bool=$this->db->updata(“表名”,关联数组,条件);

删除:$bool=$this->db->delete(“表名”,条件);

【连贯操作】

Select id,name from tablename where id=3 order by id desc limit 2,3;

$res=$this->db->select(‘id,name’)

                            ->from(‘user’)

                            ->where(‘id >=’,3)

                            ->limit(3,2)//跳过两条取三条数据

                            ->order_by(“id desc”)

                            ->get()

显示最近的一条SQL:$this->db->last_query();

Where :

         $res=$this->db->where(‘name’,’mary’)->get(‘user’);

         $res=$this->db->where(‘name !=’,’mary’)->get(‘user’);

         $res=$this->db->where(array(‘name’=>’mary’))->get(‘user’);

         $res=$this->db->where(array(‘name’=>’mary’,’id’=>’2’))->get(‘user’);

复杂的查询,调用$this->db->query($sql,$data);使用问号绑定参数

【扩展CI的控制器】

在核心文件夹system中找到文件所在的位置,在application中找到application/core/文件夹位置新建MY_Controller.php,类继承CI_Controller类。为什么是MY_controller呢,因为配置文件config.php文件中$config[‘subclass_prefix’]=”MY_”;

【模型】

继承自CI_Model在模型中,可以直接使用超级对象的属性。

文件名,全小写

类名首字母大写建议使用_model作为后缀,防止和控制器类名冲突。

【URL相关函数】

使用之前需要先进行加载helper,可以在autoload.php中配置

$autoload[‘helper’]=array(’url’);也可以在需要的时候自己进行手动加载

$this->load->helper(‘url’);

Site_url(‘控制器/方法’)

Base_url();

【设置路由】

配置文件在application/config/routes.php中$route[‘default_controller’]=’welcome’;

改变路由: 先进行路由匹配,然后修改成相应地路由文件

         //http://locahost/ci/index.php/news/2019/3.html

         $route[‘news/[\d]{6}/([\d]+)\/html’]=article/show/$1;

    1. 隐藏入口文件:开启Apache http.conf的rewrite模块:localmodule rewrite_module module/mod_rewrite.so重启Apache。在入口文件同级目录中,放入一个.htaccess文件。将未匹配成功的文件全都重写到默认文件中去。

【分页】

//加载对应的library和helper配置

$this->load->library(‘pagination’);

$this->load->helper(‘url’);

//设置需要显示的关联数组

$page_size=10;

$config[‘base_url’]=site_url(‘user/test’);

$config[‘total_rows’]=100;

$config[‘per_page’]=$page_size;

$config[‘first_link’]=’首页’;

$config[‘next_link’]=’下一页’;

$congfig[‘uri_segment’]=3;//分页的数据查询偏移量在哪一段上

//调用分页对象及方法

$this->pagination->initialize($config);

$offset=intval($this->segment(3));//与config[‘uri_segment’]对应

展示view

$sql=’’;

$data[‘links’]=$this->pagination->create_links();

$this->load->view(‘user/test’,$data);

【文件上传】

//上传目录需要手工创建

$config[‘upload_path’]=’./uploads/’;

//允许上传的内容

$config[‘allow_types’]=’gif|png|jpg|jpeg’;

$config[‘max_size’]=’10000’;

//生成新的文件名

$config[‘file_name’]=uniqid();

//装载文件上传

$this->load->library(‘upload’,$config);

$this->upload->do_upload(‘pic’);
 //获取上传之后的数据

$data=$this->upload->data();

【session】

设置:

$this->session->set_userdata(‘user’,$data);

不在设置session的时候获取存入的数据,只有页面重新加载或者跳转到别的URL的时候才能重=重新获取得到。

一次性的数据只能获取一次

$this->session->set_flashdata(‘test’,’aaaa’);

获取:

$this->load->library(‘session’);

$data=$this->session->userdata(‘user’);或者$this->session->flashdata(‘data’);

【验证码】

//需要加载helper,并且手动创建验证码的存放路径

$this->load->helper(‘url’);

$this->load->helper(‘captcha’);

$vars=[‘img_path’=>’./captcha/’,     //此目录需要手动创建

‘img’=>base_url().’/captcha/’];

 $cap=create_captcha($vars);

// 推荐直接把验证码放入到session中,然后拿到数据之后用session中的数据进行对比即可。Session_start();$_SESSION[‘cap’]=$cap[‘word’];

【表单验证】

$this->load->library(‘form_validation’);

$this->form_validation->set_rules(‘name’,’用户名’,’require’);

$this->form_validation->set_rules(‘email,’邮箱’,’vaild_email’);

$bool=$this->form_caildation->run();

If($bool){验证成功}else{显示错误信息}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值