CI笔记

简介: 目录结构说明 license.txt 许可协议 user_guide 用户手册 system 框架核心文件 application 应用目录 index.php 入口文件 ------------------------------ MVC 1.入口文件 唯一一个让浏览器直接请求的脚本文件 2.控制器controller 协调模型和视
目录结构说明
license.txt 许可协议
user_guide 用户手册
system 框架核心文件
application 应用目录
index.php 入口文件
------------------------------
MVC
1.入口文件
唯一一个让浏览器直接请求的脚本文件
2.控制器controller
协调模型和视图
3.模型model
提供数据,保存数据
4.视图view
只负责显示
表单...
5.动作action
是控制器中方法,用于被浏览器请求
CI中的MVC
访问url使用的是pathinfo
入口文件.php/控制器/动作
application目录中:
controllers         控制器 
models 模型
views 视图
默认控制器是welcome
默认动作是index
控制器
1.不需要加后缀
2.文件名全部小写  例如 user.php
3.所有的控制器,直接或间接继承自CI_Controller类
4.控制器中,对动作(方法)要求:
public
不能以_开头
视图
1.在控制器中如果加载视图
//直接写视图名字,不写扩展名,如果有子目录,则写上目录名
$this->load->view(视图);
可以多次调用$this->load->view(视图);
2.视图中,直接使用原生php代码
3.推荐使用
<?php foreach($list as $item):?>
<?=$item['name']?>
<?php endforeach;?>
超级对象
当前的控制器对象
提供了很多属性:
$this->load
装载器类的实例system/core/Loader.php
装载器类提供方法:
view() 装载视图
vars() 分配变量到视图
database() 装载数据库操作对象 
model() 装载模型对象
helper()
$this->uri
是CI_URI类的实例 system/core/URI.php
CI_URI类提供方法:
segment(n) 用于获取url中的第n个参数(值)
传统的:入口文件.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_Input类的实例 system/core/Input.php
CI_Input类提供方法:
$this->input->post('username'); //$_POST['username']
$this->input->server('DOCUMENT_ROOT'); //$_SERVER['DOCUMENT_ROOT']
在视图中,直接用$this来访问超级对象中的属性
数据库访问
修改配置文件
application/config/database.php
将数据库访问对象,装载到超级对象的属性中 $this->db
$this->load->database();
$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'] = 'blog_';
$db['default']['swap_pre'] = 'blog_';
配置为一样,代码中,直接硬编码表前缀就行了,如果以后项目数据库表前缀发生变化,
只需要修改$db['default']['dbprefix'] = 'new_';代码中的blog_会自动替换为new_
db的自动加载
application/config/autoload.php
$autoload['libraries'] = array('database');
不需要:$this->load->database();

==================code 2笔记==================================
自增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('表名',关联数组,条件);
 
 $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)//跳过2条,取出3条数据
  ->order_by('id desc ')
  ->get();
 
 //显示最近一条SQL
 echo $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控制器
 application/core/MY_Controller.php
 控制器就要以继承自MY_Controller
 
 application/config/config.php
 $config['subclass_prefix'] = 'MY_';
 
模型
 继承自CI_Model
 在模型中,可以直接使用超级对象中的属性
 文件名,全小写
 类名首字母大写
 建议使用_model作为后缀,防和控制器类名冲突
 
 
url相关函数
 $this->load->helper('url');
 //可以根需要配置自动加载
 //application/config/autoload.php
 //$autoload['helper'] = array('url');
 
 site_url('控制器/方法')
 base_url()
 
 
路由
 application/config/routes.php
 //默认控制器
 $route['default_controller'] = "welcome";
 
http://localhost/ci/index.php/news/201309/4.html
 $route['news/[\d]{6}/([\d]+)\.html']='article/show/$1';
 
隐藏入口文件
 开始apache的rewrite模块,在httpd.conf文件中
 LoadModule rewrite_module modules/mod_rewrite.so
 重启apache
 在入口文件同级目录中,放入一个.htaccess文件
 内容如下:
  <IfModule mod_rewrite.c>
     RewriteEngine on
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
  </IfModule>
分页
 //装载类文件
 $this->load->library('pagination');
 $this->load->helper('url');
 //每页显示10条数据
 $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'] = '下一页';
 $config['uri_segment']=3;//分页的数据查询偏移量在哪一段上
 
 $this->pagination->initialize($config);
 
 $offset=intval($this->uri->segment(3));//与$config['uri_segment']对应
 $sql="select * from blog_user limit $offset, $page_size";
 echo $sql;
 
 
 $data['links']=$this->pagination->create_links();
 
 $this->load->view('user/test',$data);
 
文件上传
 1.手动创建好上传目录
 
<form action="<?php echo site_url('user/upload')?>" method="post" enctype="multipart/form-data">
  <input type="file" name="pic" />
  <input type="submit" value="上传" >
 </form>
 
//上传目录需要手工创建
 $config['upload_path']='./uploads/';
 //允许
 $config['allowed_types']='gif|png|jpg|jpeg';
 $config['max_size'] = '10000';
 //生成新文件名
 $config['file_name']=uniqid();
 //装载文件上传类
 $this->load->library('upload',$config);
 $this->upload->do_upload('pic');
 
 var_dump($this->upload->data());
 
 //获取上传之后的数据
 $data=$this->upload->data();
 echo $data['file_name'];
 
验证码
 //生成一个随机不重复的字符串作为加密用的key
  //保存到application/config/config.php
  //$config['encryption_key'] = 'adb8bf6d0ac4e17b42a80941582497a4';
  //echo md5(uniqid());exit;
  $this->load->library('session');
  $user=array('id'=>3,'name'=>'jack');
  //session_start();
  //$_SESSION['user']=$user;
  $this->session->set_userdata('user',$user);
  //不在这这里获取刚放入的数据
  //只有页在从新加载或跳转到别的url中,才能获取到
 
  //一次性的数据,只能读取一次
  $this->session->set_flashdata('test','aaaaaaaaaaaaaa');
 
 }
 
 public function show_session(){
 
  $this->load->library('session');
  //取CI session中的数据
  $user=$this->session->userdata('user');
  var_dump($user);
 
  //下次刷新,就没有了
  $test=$this->session->flashdata('test');
  echo $test;
 
 }
 
表单验证
 
 $this->load->library('form_validation');
 $this->form_validation->set_rules('name', '用户名', 'required');
 $this->form_validation->set_rules('email', '邮箱', 'valid_email');
 
 $bool=$this->form_validation->run();
 
 if($bool){
  //调用模型保存到数据库
 
 }else{
  //显示错误信息
  $this->load->view('user/add');
 
 }
<?php echo validation_errors();?>
 <form action="<?php echo site_url('user/insert');?>" method="post">
  name <input type="text" name="name" value="<?php echo set_value('name')?>" />
  <?php echo form_error('name','<span>','</span>')?>
  <br>
  password <input type="password" name="password" /><br>
  email <input type="text" name="email" value="<?php echo set_value('email')?>" />
  <?php echo form_error('email')?>
  <br>
  <input type="submit" value="submit" />
 </form>


 
 
 
 

目录
相关文章
|
1月前
|
Java Windows
jdguiwindows.rar使用步骤 手把手教你打开看jar包(附安装包)
下载 `jdguiwindows.rar` 压缩包,解压后找到 `jd-gui.exe` 并运行。通过“文件→打开”载入 `.jar` 文件,即可浏览其内部代码结构,左侧为目录树,右侧显示源码,支持搜索,方便快捷查看Java反编译内容。(238字)
331 157
|
20天前
|
人工智能 自然语言处理 搜索推荐
数字人全息舱技术解析:产品优势、应用场景与商业价值全景透视
数字人全息舱融合AI、全息投影与实时渲染技术,打造立体悬浮、可交互的虚拟数字人,实现沉浸式人机对话。广泛应用于政务、文旅、医疗、教育、零售等领域,提供7×24小时智能服务,降低运营成本,提升体验与效率,推动虚实融合智能化升级。
183 0
|
应用服务中间件 Shell Linux
教你如何在云服务器上安装并配置web服务器(这里以nginx服务器为例,操作系统linux)
教你如何在云服务器上安装并配置web服务器(这里以nginx服务器为例,操作系统linux)
教你如何在云服务器上安装并配置web服务器(这里以nginx服务器为例,操作系统linux)
|
iOS开发 开发者
解决 Objective-C 中的 EXC_CRASH (SIGABRT) 错误
在Objective-C开发中,EXC_CRASH (SIGABRT) 是常见的运行时错误。面对此类问题,首先要解析Xcode提供的详细错误信息以定位问题所在。随后,仔细审查相关代码,特别是涉及空对象处理的部分,并考虑增加条件判断。利用断言如`NSAssert`可以帮助检测潜在错误,提前中断程序避免崩溃。此外,采用异常处理机制如`@try`/`@catch`可在异常发生时优雅地捕获并处理错误,避免程序终止。结合使用断点、Xcode调试器及打印调试信息等技术,开发者能够更有效地诊断并修复这类错误。
927 1
太阳能光伏电池的simulink建模与仿真
本课题研究了太阳能光伏电池在不同光照温度和光照强度下的Simulink建模与仿真,分析了光伏电池的U-I特性和P-V特性曲线。通过MATLAB 2022a进行仿真,展示了不同温度下的特性曲线变化,揭示了温度对光伏电池性能的影响。核心原理包括光生电效应、PN结的形成与工作机理,以及载流子的产生、分离和收集过程。
|
人工智能 vr&ar Android开发
探索安卓与iOS的无限可能:移动操作系统的技术革新与未来展望
本文旨在探讨安卓和iOS这两大主流移动操作系统在技术上的创新与突破,以及它们如何塑造我们的数字生活。通过深入分析两者的最新进展、面临的挑战以及未来的发展趋势,文章揭示了移动操作系统在推动科技进步和满足用户需求方面的关键作用。我们将从技术角度出发,解读安卓的开放性与iOS的封闭性如何影响应用生态和用户体验,并探讨这些差异背后的设计理念和商业考量。同时,我们还将关注两大系统在安全性、隐私保护、人工智能集成等方面的最新动态,以及它们如何应对日益增长的网络安全威胁和用户对隐私保护的需求。此外,文章还将展望未来移动操作系统的发展,分析5G、物联网等新兴技术如何为安卓和iOS带来新的机遇和挑战,以及这两大
348 6
|
存储 SQL 分布式计算
Kylin的优点和缺点
Kylin(Apache Kylin)是一个开源的分布式分析数据仓库,专为处理大规模数据集和提供快速的多维分析(OLAP)能力而设计。
342 3
|
存储 达摩院 安全
量子计算的社会影响:我们准备好了吗?
【5月更文挑战第26天】量子计算快速发展,将重塑信息安全、科研及产业经济。中国在量子密码学和计算机领域取得重大进展,政府加大投入,企业积极探索。然而,技术挑战、应用拓展和人才短缺仍需关注。面对量子革命,我们既要抓住机遇,也要应对挑战。
VsCode通过snippet generator快速生成自定义代码片段
VsCode通过snippet generator快速生成自定义代码片段
1180 0
VsCode通过snippet generator快速生成自定义代码片段
|
机器学习/深度学习 人工智能 自然语言处理
人工智能情感标注(Emotion Labeling)
人工智能情感标注(Emotion Labeling)
976 2