codeigniter ,看完这些,就可以用它做项目了

一、MVC
  1,入口文件
    唯一一个让浏览器直接请求的脚本文件
  2,控制器 controller
    负责协调模型和视图
  3,模型 model
    只负责提供数据,保存数据
  4,视图
    只负责显示,以及搜集用户的输入(表单)
  5,action 动作
    是控制器中的方法,用于被浏览器请求

--------------------------------------------
二、CI中的MVC
  1,pathinfo 模式 http://localhost/php/ci/index.php/控制器文件/动作
    application目录中
    controller 控制器
    views 视图
    models 模型

-------------------------------------------------------------------------
三、控制器
  1,不需要加后缀,直接是 类名.php
  2, 文件名全部小写
  3,所有的控制器需要直接或间接继承自 CI_Controller 类
  4,以下划线开头的方法,不能被浏览器请求,但是可以被内部调用
  5,控制器中只有public 的方法,才能作为动作
  6,方法名不区分大小写
  7,与类名相同的方法,会被php当做构造方法,因此不要创建与类名相同的方法

---------------------------------------------------------------------------------------
四、视图
  1,在控制器中如何加载视图
   

 $this->load->view(视图);//直接写视图名字,不用加扩展名

  2,视图中直接使用原生php代码,不使用模板引擎
  3,在视图中分配变量

    

    $this->load->vars(‘title‘,"这是标题");

    $data[‘title‘] = "这是标题";
    $data[‘list‘] = $list;

    $this->load->vars($data); //可以多次调用

    在视图中
      

<?php foreach($list as $item): ?>
<tr>
<td><?php echo $item[‘id‘]; ?></td>
<td><?php echo $item[‘name‘]; ?></td>
<td><?php echo $item[‘email‘]; ?></td>
</tr>
<?php endforeach; ?>

  4,推荐使用

       

 <?php foreach($list as $item):?>
 <?php endforeach; ?>

-------------------------------------------------------------------------------
五、ci的超级对象
  当前的控制器对象
  属性
  $this->load 
  装载器类的实例
  装载器类提供的方法:
  view() 装载视图
  vars() 分配变量
  database() 装载数据库操作对象
  model() 装在模型
  helper() 辅助函数

  $this->uri
  是CI_URI 类的实例
  CI_URI提供的方法:
    segment() 用于获取url中某一段的值 
  传统pathinfo
    入口文件.php/控制器/动作/参数1/值1/参数2/值2
  CI的pathinfo
    入口文件.php/控制器/动作/值1/值2
    $this->uri->segment(3);//对应 值1
    $this->uri->segment(4);//对应 值2

    public function index($p=0){
      echo $p;
    }
    $this->input() 输入类
    是CI_Input()的实例
    提供的方法
      $this->input->post(‘username‘);//$_POST[‘username‘](无get,可以使用segment())
      $this->input->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(); //返回第一条记录,直接是一个对象
    $res->row_array();//第一条记录的数组

  程序实例
    1,查询
      

public function showusers(){
//装载数据库操作类
$this->load->database();

//装载成功之后会放入超级对象的属性中,默认属性名是db/
//var_dump($this->db);

$sql = "select * from blog_user";

//返回一个对象
$res = $this->db->query($sql); // mysql_query()

//var_dump($res); //返回值是一个对象

$users = $res->result(); 

//mysql_fetch_object(); 返回对象
//mysql_fetch_assoc(); 返回关联数组

$data[‘user_list‘] = $users;
$this->load->view(‘index/users‘,$data);
}

2,添加

public function add{
$this->load->database();

$sql = "insert into blog_user (name,password) values (‘mary‘,md5(‘mary‘))";

$bool = $this->db->query($sql);

if($bool){
//mysql_affected_rows
echo $this->db->affected_rows(); //受影响行数
echo $this->db->insert_id(); //自增id
}

}

在上述两个例子中,存在安全问题,以及表前缀不能自动修改的问题,一以下例子针对这两个问题做了改进

1,修改(表前缀与参数绑定)

public function test8(){
//此处可以在autoload.php 中配置“自动加载”,$autoload[‘libraries‘] = array(‘database‘);
//$this->load->database();

//$name = $this->input->post(‘name‘);
$data[0] = ‘lili‘;
$data[1] = ‘lili‘;
//$db[‘default‘][‘swap_pre‘] = ‘swap_‘; 数据库配置文件中的交换表前缀
$sql = "insert into swap_user (name,password) values (?,?)";

$bool = $this->db->query($sql,$data);//SQL语句中有多个?时,需要传入索引数组

if($bool){
  echo "添加成功!";
}
}

七、数据库中的AR模型(Active Record)
  1,在 database.php 文件中
    $active_record = TRUE;
  2,自动加载
    $autoload[‘libraries‘] = array(‘database‘);
  3,在配置文件中,配置表前缀后,会自动添加
    

        $res = $this->db->get("表名"); //返回结果集对象
    $res -> result();

    $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 >=‘,2)
->limit(3,2) //跳过2条取出3条数据
->order_by(‘id desc‘)
->get();
var_dump($res->result());
echo $this->db->last_query();

->where() 的一些用法

// $res = $this->db->where(‘name =‘,‘zhongshan‘)->get(‘user‘);
// $res = $this->db->where(‘name !=‘,‘zhongshan‘)->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 
  在config.php中,可以修改前缀 $config[‘subclass_prefix‘] = ‘MY_‘;

class MY_Controller extends CI_Controller{
  //构造方法会自动调用
   public function __construct(){
    parent::__construct(); //调用父类的构造方法

    //登陆验证...

    //权限验证...
  }

public function funcname(){
}

九、模型
  继承自 CI_Model
  在模型中,可以使用超级对象的属性
  文件名全部小写,类名首字母大写
  建议使用 _model 做为后缀,防止和控制器类名冲突
  程序代码
  model
  

<?php
/**
* 用户模型
* @author zhongshan <[email protected]>
*/
class User_model extends CI_Model{
//返回所有用户
    public function getAll(){
        $res = $this->db->get(‘user‘);
        return $res -> result();
    }
}    

controller

<?php
class User extends MY_Controller{
  public function index(){
    //加载模型,可以起一个别名,加载完成后,自动成为超级对象的属性
    $this->load->model(‘User_model‘,‘user‘);

    $list = $this->user->getAll(); //调用模型,获取数据

    $this->load->view("user/index",array(‘list‘ => $list));

  }
}

views

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <?php var_dump($list) ?>
</body>
</html>

十、url相关函数
  $this->load->helper(‘url‘);//可以根据需要配置自动加载,在 autoload.php 中
  site_url(‘控制器/方法‘)
  base_url()

十一、设置路由
  application/config/routes.php
  //默认控制器
  $route[‘default_controller‘] = "welcome";

  //http://localhost/php/ci/index.php/news/123456/4.html
  $route[‘news/[\d]{6}/([\d]+)\.html‘] = ‘article/show/$1‘;

十二、隐藏入口文件
  开启apache的rewrite模块,在httpd.conf 文件中
  LoadModule rewrite_module modules/mod_rewrite.so
  重启服务器
  在根目录下放入 .htaccess 文件

十三、分页类

//装载类文件
$this->load->library(‘pagination‘);
//每页显示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 user limit {$offset},{$page_size}";

echo $sql;

//创建链接
$data[‘links‘] = $this->pagination->create_links();

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

十四、文件上传 
  1,手动创建好上传目录
  2,程序实例
    表单

  <form action="<?php echo site_url(‘user/upload‘); ?>" method="post" enctype="multipart/form-data">
    <input type="file" name="pic" /><input type="submit" value="提交" />
   </form>

    控制器

public function upload(){
  //上传目录需要手工创建
  $config[‘upload_path‘] = ‘./uploads/‘;
  $config[‘allowed_types‘] = ‘gif|png|jpg|jpeg‘;
  //生成新的文件名
  $config[‘file_name‘] = uniqid();
  //装载文件上传类
  $this->load->library(‘upload‘,$config);
  $this->upload->do_upload(‘pic‘);

  var_dump($this->upload->data());
  //获取上传之后的数据
  $data = $this->upload->data();

  $filename = $data[‘file_name‘];
  echo $filename;
}

十五、session

public function login(){
  //生成一个随机字符串作为一个加密用的 key
  //保存到 config.php 中的 $config[‘encryption_key‘] = ‘‘;
  // 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(‘index‘,‘abcdefghij‘);
}

public function show_session(){
  $this->load->library(‘session‘);
  //取 CI session 中的数据
  $user = $this->session->userdata(‘user‘);
  var_dump($user);

  //下次刷新,就没有了
  $test = $this->session->flashdata(‘index‘);
  echo $test;

}

十六、验证码

public function valid(){
  $this->load->helper(‘captcha‘);
  $vals = array(
    ‘word‘ => rand(1000,9999),
    ‘img_path‘ => ‘./captcha/‘,
    ‘img_url‘ => base_url().‘/captcha/‘,
    ‘img_width‘ => 100,
    ‘img_height‘ => 30,
    ‘expiration‘ => 60*10 //过期时间,时间一到,会自动删除图片
  );

  $cap = create_captcha($vals);
  echo $cap[‘image‘];

  echo $cap[‘word‘];

  session_start();
  //验证时,对比 $_SESSION[‘cap‘]
  $_SESSION[‘cap‘] = $cap[‘word‘];
}

十七、表单验证
控制器文件

public function insert(){
  // var_dump($this->input->post(‘name‘));

  $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>
pass: <input type="password" name="pass"><br>
age: <input type="number" name="age"><br>
sex: <input type="text" name="sex"><br>
email: <input type="text" name="email" value="<?php echo set_value(‘email‘);?>"><?php echo form_error(‘email‘,‘<span>‘,‘</span>‘); ?><br>

<input type="submit" value="提交">
</form> 
时间: 2024-10-10 15:40:51

codeigniter ,看完这些,就可以用它做项目了的相关文章

[经验] 电脑维修(看完后就可以开一家自己的电脑维修店!)

[经验] 电脑维修(看完后就可以开一家自己的电脑维修店!) 第一部分 总则 第一章 电脑维修的基本原则和方法 第二章 电脑维修步骤与维修操作注意事项 第二部分 常见故障判断 第一章 加电类故障 第二章 启动与关闭类故障 第三章 磁盘类故障 第四章 显示类故障 第五章 安装类故障 第六章 操作与应用类故障 第七章 局域网类故障 第八章 Internet类故障 第九章 端口与外设故障 第十章 音视频类故障 第十一章 兼容类故障 第三部分 附录 硬盘基本知识 挽救硬盘的几个方法 硬盘逻辑锁巧解 WIN

为什么你做不好互联网项目,看完这篇就懂了

大多IT从业者工作久了,会有一种迷茫, 渐渐的感觉自己提升空间越来越小了. 项目团队上下都做的很累, 这样的团队我们遇到太多了, 老板很愁很操心,技术leader或项目经理压力超大, 开发者也迷茫,上下都有严重的问题. 为什么会出现这种原因呢? 根据我们多年的项目实战经历, 问题出在整个团队缺乏对项目实战经验的掌握和学习, 也缺乏真正懂项目的人, 一个人要真正懂项目理解项目, 不是考个证就能懂的, 需要大量项目全程实战经验,才能真正懂. 这个代价有多高. 如果一个100万的小项目给你玩,5个项目

看完这个你还不理解右值引用和移动构造 你就可以来咬我(上)

共分三篇,这是第一篇.另外两篇,看完这个你还不理解右值引用和移动构造 你就可以来咬我(中),看完这个你还不理解右值引用和移动构造 你就可以来咬我(下). C++ 右值引用 & 新特性 C++ 11中引入的一个非常重要的概念就是右值引用.理解右值引用是学习"移动语义"(move semantics)的基础.而要理解右值引用,就必须先区分左值与右值. 对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值.左值和右值都是针对表达式而言的,左值是指表达式结束后依然存

傻瓜看完都可以简单使用Git

作为当下最流行的版本控制系统,Git是一个分布式版本控制系统,跟SVN等集中式版本控制有很多使用上的不同.万事开头难,想要最快学会使用Git,最简单的就是下了客户端就直接去用,一边用一边学.本文手把手教你从对Git一无所知,到简单使用. 转载请注明出处http://www.cnblogs.com/zrtqsk/p/3762489.html,谢谢! 一.安装 这里假设你跟楼主一样使用Windows系统,首先当然是去下载一个Git客户端,Git在Windows下的客户端叫做msysgit,下载地址为

如果是初学C语言请看完 一些成功人士的心得

转自程先的专栏     今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所有的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的1和0进行编码的:是他们发现了我们可以利用一个预先编写好的程序控制机器,并使之完成我们期望它完成的动作.建议大家在心里默念三遍他们的名字,以示仰慕.当然,如果让你们带着现在的知识回到他们的那个时代,那么就没有什么图灵奖了. C语言程序设计是我们的专业基础课,但是C语言本身却是

Android图表库MPAndroidChart(二)——线形图的方方面面,看完你会回来感谢我的

Android图表库MPAndroidChart(二)--线形图的方方面面,看完你会回来感谢我的 我们继续来就学习,我是强烈建议看本篇之前先看我的上一篇 Android图表库MPAndroidChart(一)--了解他的本质,方能得心应手 我们这里来实现它的折线图,也就是我们的第一个图形,我们先来看下运行后的结果: 我们一步一步来分析他是怎么实现的,首先,我们要分析他组成的元素一共是多少有多少,我们抛开基本控件Button之外,我们算了算 x轴(最大/最小值 颜色 高宽等) Y轴(最大/最小值

盘点国内程序员不常用的热门iOS第三方库:看完,还敢自称”精通iOS开发”吗?【转载】

综合github上各个项目的关注度与具体使用情况,涵盖功能,UI,数据库,自动化测试,编程工具等类型,看完,还敢自称”精通iOS开发”吗? https://github.com/syedhali/EZAudio 基于核心音频,有助于进行实时,低延迟音频处理和可视化的iOS和OSX音频可视化框架. https://github.com/bang590/JSPatch JSPatch使用Objective-C运行时桥接Objective-C和Javascript.你可以只包括一个此库,就可以通过Ja

安装完Ubuntu 14.04要做的九件事

www.linuxidc.com/Linux/2014-04/100411.htm 1.看看有哪些新特性 安装完之后的第一件事肯定是看看Ubuntu 14.04有哪些新的特性. Ubuntu 14.04 LTS本周发布,新特性提前看 http://www.linuxidc.com/Linux/2014-04/100152.htm Ubuntu 14.04惊艳:窗口没有边框了! http://www.linuxidc.com/Linux/2014-04/100151.htm 2.更改外观(壁纸,启

在知乎上看到 Web Socket这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错

https://www.zhihu.com/question/20215561/answer/40316953 在知乎上看到这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错,所以推荐给大家,非常值得一读. 作者:Ovear链接:https://www.zhihu.com/question/20215561/answer/40316953来源:知乎著作权归作者所有,转载请联系作者获得授权. 一.WebSocket是HTML5出的东西(协议),也就是说HTTP协议没